我在AWS Glue中有一个表,该表使用S3存储桶作为数据位置。我想在该现有表上执行Athena查询,并使用查询结果创建一个新的Glue表。
我尝试创建一个新的Glue表,将其指向S3中的新位置,然后将Athena查询结果传递到该S3位置。这几乎可以完成我想要的,但是
这些服务都是为了协同工作而设计的,因此必须有一种适当的方法来实现此目的。任何建议将不胜感激:)
答案 0 :(得分:1)
执行此操作的方法是使用CTAS query statements。
一个
CREATE TABLE AS SELECT
(CTAS)查询根据另一个查询的SELECT语句的结果在Athena中创建一个新表。雅典娜将CTAS语句创建的数据文件存储在Amazon S3中的指定位置。
例如:
CREATE TABLE new_table
WITH (
external_location = 's3://my_athena_results/new_table_files/'
) AS (
-- Here goes your normal query
SELECT
*
FROM
old_table;
)
尽管有some limitations。但是,对于您而言,最重要的是:
bucketed_by
子句中的bucket_count
和WITH
字段
CREATE TABLE new_table
WITH (
external_location = 's3://my_athena_results/new_table_files/',
bucketed_by=ARRAY['some_column_from_select'],
bucket_count=1
) AS (
-- Here goes your normal query
SELECT
*
FROM
old_table;
)
除了创建新文件并定义与您相关联的表外,还可以将数据转换为其他文件格式,例如实木复合地板,JSON等
答案 1 :(得分:0)
我想您必须更改您的服务。如果要查询csv数据,则opencsvserde或lazysimple serde都可以为您工作。