繁体   English   中英

如何使用Amazon Athena创建仅包含某些特定文件(通配符)的表?

[英]How can I create a table with only some specific files (wildcard) using Amazon Athena?

我的桶以前有这种结构:

mybucket/raw/i1.json
mybucket/raw/i2.json

使用Amazon Athena使用下面的代码创建表格非常容易和直接。

CREATE EXTERNAL TABLE IF NOT EXISTS myclients.big_clients (
  `id_number` string,
  `txt` string,
   ...
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
) LOCATION 's3://mybucket/raw/'
TBLPROPERTIES ('has_encrypted_data'='false');

现在我在存储桶结构中迁移时遇到了一些问题。

桶中的新结构如下所示。

mybucket/raw/1/i1.json
mybucket/raw/1/docs/doc_1.json
mybucket/raw/1/docs/doc_2.json
mybucket/raw/1/docs/doc_3.json
mybucket/raw/2/i2.json
mybucket/raw/2/docs/doc_1.json
mybucket/raw/2/docs/doc_2.json

我希望我现在可以创建两个表(我在迁移之前使用的是同一个表,只有一个新的表与文档一起使用。)有什么方法可以做到这一点而无需在另一个文件夹中重新安排我的文件? 我在创建表时正在为存储桶文件搜索某种通配符。

CREATE EXTERNAL TABLE IF NOT EXISTS myclients.big_clients (
  `id_number` string,
  `txt` string,
   ...
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
  'input.regex' = 'i*.json'
) LOCATION 's3://mybucket/raw/'
TBLPROPERTIES ('has_encrypted_data'='false');

CREATE EXTERNAL TABLE IF NOT EXISTS myclients.big_clients_docs (
  `dt` date,
  `txt` string,
  `id_number` string,
  `s3_doc_path` string,
  `s3_doc_path_origin` string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
  'input.regex' = 'doc_*.json'
) LOCATION 's3://mybucket/raw/'
TBLPROPERTIES ('has_encrypted_data'='false');

我在寻找同样的事情。 不幸的是,这是不可能的,因为s3 api不是那种通配符友好(需要扫描客户端的所有密钥,这很慢)。 athena的文档还指出这不受支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM