Как правильно импортировать ЦВ в Афину - PullRequest
0 голосов
/ 30 мая 2018

Я придерживаюсь этого примера:

LazySimpleSerDe для файлов CSV, TSV и пользовательских разделителей - пример TSV

Сводка кода:

CREATE EXTERNAL TABLE flight_delays_tsv (
 yr INT,
 quarter INT,
 month INT, 
    ...
 div5longestgtime INT,
 div5wheelsoff STRING,
 div5tailnum STRING
)
 PARTITIONED BY (year STRING)
 ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '\t'
  ESCAPED BY '\\'
  LINES TERMINATED BY '\n'
 LOCATION 's3://athena-examples-myregion/flight/tsv/';

Мои вопросы:

  • У моего tsv нет имен столбцов

(мой tsv) enter image description here

Это нормально, если я просто перечислю столбцы как c1, c2 ... и все они как string?

  • Я не понимаю этого:

    РАЗДЕЛЕННЫЙ (STRING года)

в этом примере столбец year не указан ни в одном из столбцов…

1 Ответ

0 голосов
/ 31 мая 2018

Имена столбцов

Имена столбцов определяются командой CREATE EXTERNAL TABLE.Я рекомендую вам назвать что-то полезное, чтобы было легче писать запросы.Имена столбцов не обязательно должны совпадать с именами в реальном файле.(Он не интерпретирует строки заголовка.)

Секционирование

Из Данные секционирования - Amazon Athena :

Чтобы создать таблицу с разделами, вы должны определить ее в операторе CREATE TABLE.Используйте PARTITIONED BY для определения ключей, с помощью которых можно разделить данные.

Поле, используемое для разделения данных, NOT хранится в самих файлах, поэтому их нет вопределение таблицы.Скорее, значение столбца хранится в имени каталога .

Это может показаться странным (хранение значений в имени каталога!), Но на самом деле имеет смысл, поскольку позволяет избежать ситуаций, когда неправильныйзначение хранится в папке.Например, если есть папка year=2018, что произойдет, если файл содержит столбец, в котором год равен 2017?Этого можно избежать, сохранив year в имени каталога, так что любым файлам в этом каталоге присваивается значение, обозначенное в имени каталога.

В запросах все еще можно использовать WHERE year = 2018, даже если это не так.указан в качестве фактического столбца.

См. также: LanguageManual DDL - Apache Hive - Apache Software Foundation

Другая полезная вещь заключается в том, что данные можно обновлять, просто перемещаяфайл в другой каталог.В этом примере это изменило бы значение year в результате нахождения в другом каталоге.

Да, это странно, но хитрость заключается в том, чтобы перестать думать об этом как о обычной базе данных и оценить свободучто он предлагает.Например, добавить новые данные так же просто, как перенести файл в каталог.Загрузка не требуется!

...