我试图加载一个由spark输出的parquet
文件,从S3进入雅典娜。实木复合地板的结构是[StructField(URI,StringType,true), StructField(LINK_ID,LongType,true)]
。所以两个字段是第一个string
第二个long
。我试图将这个镶木地板加载到一个表格中,我正在努力加载long
类型的第二个字段。 Athena给出的整数选项为tinyint
,int
和bigint
。我原以为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中加载一个长型字段吗?
答案 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