雅典娜-创建字段名与parquet列名不同的外部表

hrirmatl  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(401)

我想用雅典娜创建一个外部表。正在读取的数据被格式化为parquet,我的外部表脚本是:

  1. CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
  2. a string,
  3. b string,
  4. y string
  5. ) PARTITIONED BY (
  6. year bigint,
  7. month bigint,
  8. day bigint
  9. )
  10. ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
  11. WITH SERDEPROPERTIES (
  12. 'serialization.format' = '1'
  13. ) LOCATION 's3://my_path/to/parquet'
  14. TBLPROPERTIES ('has_encrypted_data'='false');

但是,我的Parquet地板列名是 a, b, x . 我如何绘制这个领域的Map x 拥有 y 作为我的外部表上的名称?

sbtkgmzw

sbtkgmzw1#

实际上,这是可能的,但也有一些缺点。
在雅典娜,默认情况下,Parquet地板中的表是按名称读取的。这使您可以灵活地对表中的列重新排序或在表的中间添加新列。
如果可以不使用它,可以通过指定

  1. WITH SERDEPROPERTIES ('parquet.column.index.access'='true')

在你的情况下,这看起来像

  1. CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
  2. a string,
  3. b string,
  4. y string
  5. ) PARTITIONED BY (
  6. year bigint,
  7. month bigint,
  8. day bigint
  9. )
  10. ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
  11. WITH SERDEPROPERTIES (
  12. 'parquet.column.index.access'='true'
  13. 'serialization.format' = '1'
  14. ) LOCATION 's3://my_path/to/parquet'
  15. TBLPROPERTIES ('has_encrypted_data'='false');

请注意,这要求分区列的顺序与在ddl语句中编写它们的顺序相同。
您可以在aws文档回购上阅读更多关于此问题的信息

展开查看全部

相关问题