Вам необходимо внести пару изменений в ваше заявление CREATE TABLE
:
- используйте
'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
в качестве INPUTFORMAT
- Убедитесь, что вы указываете на папку с помощью
LOCATION
заявления
Итак, ваше заявление будет выглядеть так:
CREATE EXTERNAL TABLE `my_DB`.`my_external_table`(
column1 string,
column2 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'separatorChar' = ',',
'quoteChar' = '\"',
'escapeChar' = '\\'
)
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://mys3bucket/tables/my_table/'
И s3://mys3bucket/tables/my_table/
будет содержать один файл с путями S3 тех CSV-файлов, которые вы хотите запросить - по одному пути на строку. Я не уверен, будет ли настройка skip.header.line.count
работать с самим файлом манифеста или файлами CSV, поэтому вам придется проверить.
В качестве альтернативы, если у вас ограниченное количество файлов, вы можете использовать S3 Выберите , чтобы запросить конкретные столбцы в этих файлах, по одному за раз. С помощью интерфейса командной строки AWS команда для извлечения 2-го столбца будет выглядеть примерно так:
aws s3api select-object-content \
--bucket mys3bucket \
--key path/to/your.csv.gz \
--expression "select _2 from s3object limit 100" \
--expression-type SQL \
--input-serialization '{"CSV": {}, "CompressionType": "GZIP"}' \
--output-serialization '{"CSV":{}}' \
sample.csv
(Отказ от ответственности: сотрудник AWS)