Ошибка при создании Parquet table из CSV с помощью Apache Drill

Я пытаюсь создать таблицу Parquet из извлечения CSV (сгенерированного из таблицы базы данных Oracle), который имеет более миллиона строк. около 25 из этих строк имеют нулевые значения для START_DATE, а CTAS не может интерпретировать "" как null. Любые предложения будут ценны.

CREATE TABLE dfs.tmp.FOO as
select cast(columns[0] as INT) as `PRODUCT_ID`,
cast(columns[1] as INT) as `LEG_ID`,
columns[2] as `LEG_TYPE`,
to_timestamp(columns[3], 'dd-MMM-yy HH.mm.ss.SSSSSS a') as `START_DATE`
from dfs.`c:\work\prod\data\foo.csv`;



Error: SYSTEM ERROR: IllegalArgumentException: Invalid format ""

person indus73    schedule 24.11.2015    source источник


Ответы (2)


Вы всегда можете включить оператор CASE, чтобы отфильтровать пустые записи:

CREATE TABLE dfs.tmp.FOO as
select cast(columns[0] as INT) as `PRODUCT_ID`,
cast(columns[1] as INT) as `LEG_ID`,
columns[2] as `LEG_TYPE`,
CASE WHEN columns[3] = '' THEN null
  ELSE to_timestamp(columns[3], 'dd-MMM-yy HH.mm.ss.SSSSSS a') 
END as `START_DATE`
from dfs.`c:\work\prod\data\foo.csv`;
person Chris Matta    schedule 25.11.2015

Вы также можете использовать функцию NULLIF (), как показано ниже

CREATE TABLE dfs.tmp.FOO as
select cast(columns[0] as INT) as `PRODUCT_ID`,
cast(columns[1] as INT) as `LEG_ID`,
columns[2] as `LEG_TYPE`,
to_timestamp(NULLIF(columns[3],''), 'dd-MMM-yy HH.mm.ss.SSSSSS a') as `START_DATE`
from dfs.`c:\work\prod\data\foo.csv`;

NULLIF преобразует пустую строку в null, и преобразование не завершится ошибкой.

person Srihari Karanth    schedule 29.10.2016