AWS Glue作业可将表转换为Parquet,而无需其他搜寻器

时间:2019-06-24 18:17:19

标签: amazon-web-services amazon-s3 amazon-athena aws-glue

是否可以让Glue作业将JSON表重新分类为Parquet,而不需要另一个搜寻器来爬行Parquet文件?

当前设置:

  1. 分区的S3存储桶中的JSON文件每天抓取一次
  2. Glue Job在指定的文件夹中创建Parquet文件
  3. 运行另一个搜寻器以重新创建与步骤1中创建的表相同的表

我必须相信,有一种方法可以在没有其他搜寻器的情况下转换表分类(但是以前我已经被AWS烧死了)。任何帮助深表感谢!

1 个答案:

答案 0 :(得分:1)

为了方便起见-最好使用2个搜寻器。

出于成本考虑-骇人听闻的解决方案应该是:

  1. 使用CREATE TABLE命令从Athena获取json表的SHOW CREATE TABLE <json_table>; DDL;

  2. CREATE TABLE DDL中,将表名和SerDer从json替换为实木复合地板。除了CREATE TABLE之外,您不需要原始LOCATION DDL中的其他表属性。

  3. 在雅典娜执行新的CREATE TABLE DDL。

例如:

SHOW CREATE TABLE json_table;

原始DDL:

CREATE EXTERNAL TABLE `json_table`(
  `id` int COMMENT, 
  `name` string COMMENT)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
...
LOCATION
  's3://bucket_name/table_data'
...

新的DDL:

CREATE EXTERNAL TABLE `parquet_table`(
  `id` int COMMENT, 
  `name` string COMMENT)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
LOCATION
  's3://bucket_name/table_data'

您也可以使用Glue api方法以相同的方式执行此操作:get_table()> replace> create_table()。

注意-如果要定期运行它,则需要将其包装在脚本中,并在第一个搜寻器运行后用另一个调度程序(crontab等)进行调度。