Redshift 频谱显示所有行的 NULL 值
Redshift spectrum shows NULL values for all rows
当我在 Athena 查询编辑器中 运行 这个查询时,它按预期工作。
SELECT * FROM "sampledb"."elb_logs" limit 10;
elb_logs table是根据官方教程生成的。当我尝试在红移中使用光谱时,我可以看到所有列的所有 "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';
以及系统table的输出:
select * from 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"}
我不确定为什么 athena 控制台显示所有列的正确值而 redshift 显示所有 NULL?
这是因为 elb_logs table 使用了 spectrum 无法处理的 正则表达式序列化 。我使用此命令将 table 转换为 parquet 文件格式。
CREATE TABLE elb_logs3
WITH (
format = 'PARQUET',
parquet_compression = 'SNAPPY',
external_location = 's3://elb163/parqfiles'
) AS SELECT * from elb_logs
现在雅典娜将有 2 tables "elb_logs" 和 "elb_logs3"。一旦我使用像这样的标准命令创建了外部模式...
drop schema "athena_schema";
create external schema athena_schema from data catalog
database 'sampledb'
iam_role 'arn:aws:iam::XXX:role/RedshiftCopyUnload'
region 'us-east-1';
我现在可以 select 像这样从 elb_logs table 记录...
select * from athena_schema.elb_logs3 limit 10;
请注意,selecting 来自 elb_logs table 仍然显示所有列的 NULL 值。
当我在 Athena 查询编辑器中 运行 这个查询时,它按预期工作。
SELECT * FROM "sampledb"."elb_logs" limit 10;
elb_logs table是根据官方教程生成的。当我尝试在红移中使用光谱时,我可以看到所有列的所有 "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';
以及系统table的输出:
select * from 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"}
我不确定为什么 athena 控制台显示所有列的正确值而 redshift 显示所有 NULL?
这是因为 elb_logs table 使用了 spectrum 无法处理的 正则表达式序列化 。我使用此命令将 table 转换为 parquet 文件格式。
CREATE TABLE elb_logs3
WITH (
format = 'PARQUET',
parquet_compression = 'SNAPPY',
external_location = 's3://elb163/parqfiles'
) AS SELECT * from elb_logs
现在雅典娜将有 2 tables "elb_logs" 和 "elb_logs3"。一旦我使用像这样的标准命令创建了外部模式...
drop schema "athena_schema";
create external schema athena_schema from data catalog
database 'sampledb'
iam_role 'arn:aws:iam::XXX:role/RedshiftCopyUnload'
region 'us-east-1';
我现在可以 select 像这样从 elb_logs table 记录...
select * from athena_schema.elb_logs3 limit 10;
请注意,selecting 来自 elb_logs table 仍然显示所有列的 NULL 值。