我的桶以前有这种结构:
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');
答案 0 :(得分:1)
我一直在寻找相同的东西。不幸的是,由于s3 api不是通配符友好的,所以这是不可能的(需要扫描客户端的所有密钥,这很慢)。雅典娜的文档还指出不支持此操作。