【问题标题】:data appears as null on redshift external table while working right on athena在 athena 上工作时,数据在 redshift 外部表上显示为空
【发布时间】:2018-08-30 06:44:29
【问题描述】:

所以我试图在红移光谱上运行以下简单查询:

select * from company.vehicles where vehicle_id is not null

它返回 0 行(表中的所有行都是空的)。但是,当我在 athena 上运行相同的查询时,它可以正常工作并返回结果。尝试了 msck 修复,但 athena 和 redshift 都使用相同的元存储,所以没关系。 我也没有看到任何错误。

文件格式为orc。

创建表查询是:

CREATE EXTERNAL TABLE 'vehicles'(
  'vehicle_id' bigint, 
  'parent_id' bigint, 
  'client_id' bigint, 
  'assets_group' int, 
  'drivers_group' int)
PARTITIONED BY ( 
  'dt' string, 
  'datacenter' string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  's3://company-rt-data/metadata/out/vehicles/'
TBLPROPERTIES (
  'CrawlerSchemaDeserializerVersion'='1.0', 
  'CrawlerSchemaSerializerVersion'='1.0',  
  'classification'='orc', 
  'compressionType'='none')

有什么想法吗?

【问题讨论】:

    标签: sql amazon-redshift amazon-athena amazon-redshift-spectrum


    【解决方案1】:

    您是如何创建外部表的? 对于 Spectrum,您必须显式设置参数以将应视为 null 的内容处理

    在 TABLE PROPERTIES 中添加参数 'serialization.null.format'='' 以便所有带有 '' 的列都将被视为 NULL 到您的频谱中的外部表中

    **

    CREATE EXTERNAL TABLE external_schema.your_table_name(
    )
    row format delimited
        fields terminated by ','
        stored as textfile 
    LOCATION [filelocation]
    TABLE PROPERTIES('numRows'='100', 'skip.header.line.count'='1','serialization.null.format'='');
    

    **

    或者,您可以在创建将自动识别 NULL 值的外部表时设置 SERDE-PROPERTIES

    【讨论】:

    • 您提到的属性仅与文本类型的数据相关。您应该使用它,以防您的文本文件包含您希望光谱读取为空的空字段。但是我的数据类型是 orc - 我添加了创建表查询。我的问题是 redshift 将所有行显示为空,尽管它们确实包含数据。在 athena 上我可以正确查看数据。@theDbGuy
    • 好的。请问文件存储在哪里?是在雅典娜还是频谱目录中
    • 数据存储在s3中,元数据存储在胶水数据目录@theDbGuy
    • 您能否使用主键或其他东西从 athena 中选择一条记录(当您执行 NOT NULL 条件时返回)并尝试在频谱中选择相同的记录并让我知道输出是否匹配
    • 如果可能,尝试使用胶水爬虫创建表,而不是使用CREATE语句
    【解决方案2】:

    最终证明这是红移中的一个错误。为了修复它,我们需要运行以下命令:

    ALTER TABLE table_name SET TABLE properties(‘orc.schema.resolution’=‘position’);
    

    【讨论】:

    • 你有关于这个错误的更多细节吗?我有一个类似的问题,虽然它只是一些列没有出现。不过,它们在雅典娜中看起来还不错。
    • 您好@confytoday,您找到解决方案了吗?对我来说也只有一些列是空的,这里没有什么不能解决我的问题
    猜你喜欢
    • 2019-02-02
    • 2016-12-13
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2021-05-28
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多