【问题标题】:Error while creating Parquet table from CSV using Apache Drill使用 Apache Drill 从 CSV 创建 Parquet 表时出错
【发布时间】:2015-11-24 15:11:02
【问题描述】:

我正在尝试从具有超过一百万行的 CSV 提取(从 Oracle 数据库表生成)创建 Parquet 表。其中大约 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 ""

【问题讨论】:

    标签: csv parquet apache-drill


    【解决方案1】:

    您始终可以包含 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`;
    

    【讨论】:

      【解决方案2】:

      你也可以使用如下的 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 并且转换不会失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 2019-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多