红移频谱显示所有行的NULL值

时间:2019-10-03 05:16:33

标签: amazon-redshift-spectrum

当我在Athena查询编辑器中运行此查询时,它会按预期工作。

  

SELECT * FROM“ sampledb”。“ elb_logs”限制10;

elb_logs表是根据官方教程生成的。当我尝试在redshift中使用频谱时,我可以看到所有列的所有“ NULL”值。我正在使用以下命令创建athena_schema:

drop schema "athena_schema";

create external schema athena_schema from data catalog 
database 'sampledb' 
iam_role 'arn:aws:iam::94331XXXXXXX:role/RedshiftCopyUnload'
region 'ap-south-1';

以及系统表的输出:

  

从svv_external_tables中选择*;

schemaname  tablename   location    input_format    output_format   serialization_lib   serde_parameters    compressed  parameters

athena_schema   elb_logs    s3://athena-examples-ap-south-1/elb/plaintext   org.apache.hadoop.mapred.TextInputFormat    org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat  org.apache.hadoop.hive.serde2.RegexSerDe    {"input.regex":"([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*):([0-9]*) ([.0-9]*) ([.0-9]*) ([.0-9]*) (-|[0-9]*) (-|[0-9]*) ([-0-9]*)     0   {"EXTERNAL":"TRUE","transient_lastDdlTime":"1480278335"}

我不确定为什么雅典娜控制台会为所有列显示正确的值,而redshift会显示所有NULL?

1 个答案:

答案 0 :(得分:0)

这是因为elb_logs表使用的是频谱无法处理的正则表达式序列化。我使用此命令将表转换为实木复合地板文件格式。

yv

现在,雅典娜将有2个表“ elb_logs”和“ elb_logs3”。一旦我使用诸如此类的标准命令创建了外部架构...

CREATE TABLE elb_logs3
WITH (
      format = 'PARQUET',
      parquet_compression = 'SNAPPY',
      external_location = 's3://elb163/parqfiles'
) AS SELECT * from elb_logs

我现在可以像这样从elb_logs表中选择记录...

  

从athena_schema.elb_logs3限制10中选择*;

请注意,从elb_logs表中进行选择仍然会为所有列显示NULL值。