Я импортирую файл паркета из S3 в Redshift. Файл имеет 3 столбца. Последний столбец - это объект JSON с несколькими столбцами. Используя следующий код:
CREATE TABLE database_name.table_name (
text_field_1 VARCHAR(255)
, text_field_2 VARCHAR(255),
, json_field_1 VARCHAR(255));
Затем я делаю команду копирования:
copy parquet.raw_jamcityads_purchase from 's3://my-bucket/my-file.parquet'
iam_role 'arn:aws:iam::1###########2:role/R######S3'
parquet;
Проблема в том, что команда COPY интерпретирует json_field_1
в файле паркета как несколько столбцов и выдает мне эту ошибку:
Query execution failed
Reason:
SQL Error [500310] [XX000]: [Amazon](500310) Invalid operation: S3 Query Exception (Fetch)
Details:
-----------------------------------------------
error: S3 Query Exception (Fetch)
code: 15001
context: Task failed due to an internal error. Unmatched number of columns between table and file. Table columns: 3, Data columns: 5, File name: ####
query: 4384070
location: dory_util.cpp:872
process: query1_56_4384070 [pid=18317]
-----------------------------------------------;
Я не уверен, как сказать Redshift, что json_field_1
- это одно поле в файле паркета.
Я предпочитаю достичь этой цели с помощью команды COPY
, а не исследовать Redshift Spectrum / Athena / и т. Д., Поскольку именно так мы загружаем данные наших клиентов.
Я хотел бы иметь возможность загружать столбец JSON в виде строки и распоряжаться им. Мне не нужно то, что там. Сейчас я не могу загрузить файл PARQUET полностью.