web-dev-qa-db-ja.com

Aws Athena-最初の行をスキップして外部テーブルを作成

私は以下のコードでAws Athenaを使用してcsvファイルに外部テーブルを作成しようとしていますが、TBLPROPERTIES ("skip.header.line.count"="1")行は機能しません:csvファイルの最初の行(ヘッダー)をスキップしません。

CREATE EXTERNAL TABLE mytable
(
  colA string,
  colB int
  )

 ROW FORMAT SERDE 'org.Apache.hadoop.Hive.serde2.OpenCSVSerde'
 WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '\"',
   'escapeChar' = '\\'
   )
STORED AS TEXTFILE
LOCATION 's3://mybucket/mylocation/'
TBLPROPERTIES (
  "skip.header.line.count"="1")

何かアドバイスはありますか?

13
nicola

"skip.header.line.count"="1"そして今はうまく機能しているようです。

20
Filippo Loddo

これはまだ実装されていない機能です。 Abhishek @ AWSの応答を参照してください ここ

「我々はそれに取り組んでおり、結果が出るとすぐに報告します。これについては申し訳ありません。これは予想よりも時間がかかりました。」

私の回避策は、テーブルを作成する前にデータを前処理することです。

  1. s3からcsvファイルをダウンロードします
  2. bash sed -e 1d -e 's/\"//g' file.csv > file-2.csvを使用してヘッダーを削除します
  3. 結果をS3上の独自のフォルダーにアップロードします
  4. テーブルを作成する
5
Luba Gloukhova

私は最近試しました:

TBLPROPERTIES ('skip.header.line.count'='1')

そして、今はうまく機能しています。この問題は、列ヘッダーを文字列(タイムスタンプ)として使用し、実際のタイムスタンプがあるレコードがあるときに発生しました。私のクエリは、テーブルをスキャンしてtimestampの代わりに文字列を見つけるので、爆弾になります。

このようなもの:

ts
2015-06-14 14:45:19.537
2015-06-14 14:50:20.546

0
Raj

この質問が行われたとき、ヘッダーのスキップはサポートされていませんでした。また、 後で導入されました の場合は OpenCSVSerDe のみで、 LazySimpleSerDe はサポートされませんでしたROW FORMAT DELIMITED FIELDS …を指定したときに得られるものです。これが、この質問への回答で機能するかどうかについて混乱を引き起こした原因だと思います。

0
Theo

AWSコンソールで、Serdeパラメーターのキーと値のキーペアとして指定できます

skip header in athena table

一方、テラフォームでコードとしてインフラストラクチャを適用する場合は、ser_de_infoパラメーター- "skip.header.lineを使用できます。カウント」= 1。以下の例

resource "aws_glue_catalog_table" "banana_datalake_table" {
  name          = "mapping"
  database_name = "banana_datalake"
  table_type    = "EXTERNAL_TABLE"
    owner = "owner"
    storage_descriptor {
        location        = "s3://banana_bucket/"
        input_format    = "org.Apache.hadoop.mapred.TextInputFormat"
        output_format   = "org.Apache.hadoop.Hive.ql.io.HiveIgnoreKeyTextOutputFormat"
        compressed  = "false"
        number_of_buckets = -1    
        ser_de_info {
            name    = "SerDeCsv"
            serialization_library = "org.Apache.hadoop.Hive.serde2.lazy.LazySimpleSerDe"
            parameters {
                "field.delim" = ","
                "skip.header.line.count" = 1    # Skip file headers
            }
        }
        columns {
            name    = "column_1"
            type    = "string"
        }
        columns {
            name    = "column_2"
            type    = "string"
        }
        columns {
            name    = "column_3"
            type    = "string"
        }
    }
}
0
Gunay Anach