У меня есть внешняя таблица, которая заполняется из файла csv. В файле csv есть поле, в котором есть escape-символ, за которым следует запятая. например, "a\,b", который должен читаться просто как "a,b". когда я загружаю CSV-файл, он разделяет его на 2 столбца «a», «b», но должен читать «a, b» в одном столбце. Я пробовал использовать опцию = '' безуспешно.
CREATE OR REPLACE EXTERNAL TABLE TEST
(A STRING,
B STRING)
OPTIONS (
format = 'CSV',
quote = '\'
)
Could someone help ?
привет это выглядит так позже бла, а\, б, бла
возможно, есть другой простой способ, но вы можете попробовать ниже. Надеюсь, поможет. В ответе field_delimiter CHR(1)
означает рассматривать каждую строку в файле как один столбец в таблице.
Вы можете попробовать обходной путь ниже.
CREATE OR REPLACE EXTERNAL TABLE `your-project.your-dataset.so_test` (
raw STRING
) OPTIONS (
uris=['gs://your-bucket/so/test2.csv'],
format = 'CSV',
field_delimiter = CHR(1)
);
CREATE TEMP TABLE sample_table AS
SELECT csv[SAFE_OFFSET(0)] col1,
REPLACE(csv[SAFE_OFFSET(1)], '|', ',') col2,
csv[SAFE_OFFSET(2)] col3,
FROM `bigdata-cubig-data.bdc_cubig_temp.so_test`,
UNNEST ([STRUCT(SPLIT(REPLACE(raw, '\\,', '|')) AS csv)]);
SELECT * FROM sample_table;
Образец CSV-файла
бла, а\, б, бла
Результаты запроса
Или, используя запрос PIVOT
CREATE TEMP TABLE sample_table (
col1 STRING, col2 STRING, col3 STRING,
) AS
SELECT * REPLACE(REPLACE(col_1, '|', ',') AS col_1) FROM (
SELECT col, offset
FROM `your-project.your-dataset.so_test`,
UNNEST (SPLIT(REPLACE(csv, '\\,', '|'))) col WITH offset
) PIVOT (ANY_VALUE(col) col FOR offset IN (0, 1, 2));
SELECT * FROM sample_table;
как выглядит csv?
"a\,b","c"
илиa\,b,c
?