Ответ 1
Просто попробовал "skip.header.line.count"="1"
и, похоже, сейчас работает нормально.
Я пытаюсь создать внешнюю таблицу в файлах csv с Aws Athena с кодом ниже, но строка 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
заголовок, используя bash sed -e 1d -e 's/\"//g' file.csv > file-2.csv
Я недавно попробовал:
TBLPROPERTIES ('skip.header.line.count'='1')
И теперь работает нормально. Эта проблема возникла, когда у меня был заголовок столбца в виде строки (метка времени) и записи, где были фактические метки времени. Мои запросы будут бомбить, как если бы они сканировали таблицу и находили строку вместо timestamp
.
Что-то вроде этого:
Т.С.
2015-06-14 14: 45: 19.537
2015-06-14 14: 50: 20.546
Когда был задан этот вопрос, не было поддержки пропуска заголовков, а когда он был позже представлен, он был только для OpenCSVSerDe, а не для LazySimpleSerDe, который что вы получите, когда укажете ROW FORMAT DELIMITED FIELDS …
. Я думаю, что это вызвало некоторую путаницу в том, работает ли это в ответах на этот вопрос.
На консоли AWS вы можете указать его как пару ключей ключ-значение параметров Serde
Если вы применяете свою инфраструктуру как код с помощью terraform, вы можете использовать параметр ser_de_info - "skip.header.line.count" = 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"
}
}
}