在AWS Athena中从镶木地板装载长型柱

时间:2018-04-09 20:54:35

标签: amazon-web-services amazon-athena

我试图加载一个由spark输出的parquet文件,从S3进入雅典娜。实木复合地板的结构是[StructField(URI,StringType,true), StructField(LINK_ID,LongType,true)]。所以两个字段是第一个string第二个long。我试图将这个镶木地板加载到一个表格中,我正在努力加载long类型的第二个字段。 Athena给出的整数选项为tinyintintbigint。我原以为bigint会起作用,但事实并非如此。当我查询表时,第二个字段只是空的。

这里是创建表的整个查询:

CREATE EXTERNAL TABLE IF NOT EXISTS default.uri_to_link_id (
  `uri` string,
  `link_id` bigint 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://mybucket/parquet_file/'
TBLPROPERTIES ('has_encrypted_data'='false')

无论如何,我可以在Athena中加载一个长型字段吗?

1 个答案:

答案 0 :(得分:1)

我认为当您将数据转换为实木复合地板时,它会转换为Struct。您是否尝试打印架构?

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "mydatabase", table_name = "test", transformation_ctx = "datasource0")
print(datasource0.printSchema())

如果它像struct一样显示link_id,则必须使用: https://github.com/aws-samples/aws-glue-samples/blob/master/examples/resolve_choice.md