私は以下のコードで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")
何かアドバイスはありますか?
"skip.header.line.count"="1"
そして今はうまく機能しているようです。
これはまだ実装されていない機能です。 Abhishek @ AWSの応答を参照してください ここ :
「我々はそれに取り組んでおり、結果が出るとすぐに報告します。これについては申し訳ありません。これは予想よりも時間がかかりました。」
私の回避策は、テーブルを作成する前にデータを前処理することです。
sed -e 1d -e 's/\"//g' file.csv > file-2.csv
を使用してヘッダーを削除します私は最近試しました:
TBLPROPERTIES ('skip.header.line.count'='1')
そして、今はうまく機能しています。この問題は、列ヘッダーを文字列(タイムスタンプ)として使用し、実際のタイムスタンプがあるレコードがあるときに発生しました。私のクエリは、テーブルをスキャンしてtimestamp
の代わりに文字列を見つけるので、爆弾になります。
このようなもの:
ts
2015-06-14 14:45:19.537
2015-06-14 14:50:20.546
この質問が行われたとき、ヘッダーのスキップはサポートされていませんでした。また、 後で導入されました の場合は OpenCSVSerDe のみで、 LazySimpleSerDe はサポートされませんでしたROW FORMAT DELIMITED FIELDS …
を指定したときに得られるものです。これが、この質問への回答で機能するかどうかについて混乱を引き起こした原因だと思います。
AWSコンソールで、Serdeパラメーターのキーと値のキーペアとして指定できます
一方、テラフォームでコードとしてインフラストラクチャを適用する場合は、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"
}
}
}