雅典娜 table 有多个位置
Athena table with multiple locations
我的数据分布在多个目录和这些目录中的多个制表符分隔文件中。一般结构如下所示:
s3://bucket_name/directory/{year}{month}/{iso_2}/{year}{month}{day}_table.bcp.gz
其中 {year}
是 4 位数年份,{month}
是 2 位数月份,{day}
是 2 位数日期,{iso_2}
是 ISO2国家代码。
如何在 Athena 中将其设置为 table?
Athena 使用 Hive DDL,因此您只需要 运行 一个普通的 Hive create 语句:
CREATE EXTERNAL TABLE table_name(
col_1 string,
...
col_n string)
PARTITIONED BY (
year_month string,
iso_2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://bucket_name/directory/';
然后通过 运行ning MSCK REPAIR TABLE table_name
将这些目录注册为所需的 table 的新分区。如果由于某种原因失败(有时在 Athena 中会发生这种情况),您将需要 运行 为现有目录添加所有分区语句:
ALTER TABLE table_name ADD PARTITION
(year_month=201601,iso=US) LOCATION 's3://bucket_name/directory/201601/US/';
ALTER TABLE table_name ADD PARTITION
(year_month=201602,iso=US) LOCATION 's3://bucket_name/directory/201602/US/';
ALTER TABLE table_name ADD PARTITION
(year_month=201601,iso=GB) LOCATION 's3://bucket_name/directory/201601/GB/';
etc.
我的数据分布在多个目录和这些目录中的多个制表符分隔文件中。一般结构如下所示:
s3://bucket_name/directory/{year}{month}/{iso_2}/{year}{month}{day}_table.bcp.gz
其中 {year}
是 4 位数年份,{month}
是 2 位数月份,{day}
是 2 位数日期,{iso_2}
是 ISO2国家代码。
如何在 Athena 中将其设置为 table?
Athena 使用 Hive DDL,因此您只需要 运行 一个普通的 Hive create 语句:
CREATE EXTERNAL TABLE table_name(
col_1 string,
...
col_n string)
PARTITIONED BY (
year_month string,
iso_2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://bucket_name/directory/';
然后通过 运行ning MSCK REPAIR TABLE table_name
将这些目录注册为所需的 table 的新分区。如果由于某种原因失败(有时在 Athena 中会发生这种情况),您将需要 运行 为现有目录添加所有分区语句:
ALTER TABLE table_name ADD PARTITION
(year_month=201601,iso=US) LOCATION 's3://bucket_name/directory/201601/US/';
ALTER TABLE table_name ADD PARTITION
(year_month=201602,iso=US) LOCATION 's3://bucket_name/directory/201602/US/';
ALTER TABLE table_name ADD PARTITION
(year_month=201601,iso=GB) LOCATION 's3://bucket_name/directory/201601/GB/';
etc.