劃重點!AWS的湖倉一體使用哪種資料湖格式進行銜接?
阿新 • • 發佈:2020-09-27
**此前Apache Hudi社群一直有小夥伴詢問能否使用Amazon Redshift查詢Hudi表,現在它終於來了。**
現在您可以使用Amazon Redshift查詢Amazon S3 資料湖中Apache Hudi/Delta Lake表資料。Amazon Redshift Spectrum作為Amazon Redshift的特性可以允許您直接從Redshift叢集中查詢S3資料湖,而無需先將資料載入到其中,從而最大限度地縮短了洞察資料價值時間。
Redshift Spectrum支援Lake house架構,可以跨Redshift、Lake house和操作資料庫查詢資料,而無需進行ETL或載入資料。Redshift Spectrum支援開放資料格式,如Parquet、ORC、JSON和CSV。Redshift Spectrum還支援查詢具有複雜巢狀資料型別(如struct、array或map)。
Redshift Spectrum允許您讀取Apache Hudi 0.5.2版本的Copy-on-Write(CoW)表的最新快照,並且可以通過manifest檔案讀取最新的Delta Lake 0.5.0版本表。
要查詢Apache Hudi的Copy-On-Write(CoW)格式的資料,可以使用Amazon Redshift-Spectrum外表。Hudi Copy On Write表是儲存在Amazon S3中的Apache Parquet檔案的集合。有關更多資訊,請參閱開源Apache Hudi文件中的[Copy-On-Write](https://hudi.apache.org/docs/concepts.html#copy-on-write-table)表。
當建立引用Hudi CoW格式資料的外表後,將外表中的每一列對映到Hudi資料中的列。對映是按列完成的。
Hudi分割槽和未分割槽表的資料定義語言(DDL)語句與其他Apache Parquet檔案格式的語句類似。對於Hudi表,可以將`INPUTFORMAT`定義為`org.apache.hudi.hadop.HoodieParquetInputFormat`. `LOCATION`引數必須指向包含`.hoodie`資料夾的Hudi表基礎資料夾,該資料夾是建立Hudi提交時間線所必需的。在某些情況下,對Hudi表的SELECT操作可能會失敗,並顯示訊息**`No valid Hudi commit timeline found`**。如果是,請檢查`.hoodie`資料夾是否在正確的位置,並且包含有效的Hudi提交時間線。
> 注意,Apache Hudi格式只有在使用AWS Glue Data時支援,不支援使用Apache Hive metastore作為外部catalog。
使用如下命令定義非分割槽表
```sql
CREATE EXTERNAL TABLE tbl_name (columns)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://s3-bucket/prefix'
```
使用如下命令定義分割槽表
```sql
CREATE EXTERNAL TABLE tbl_name (columns)
PARTITIONED BY(pcolumn1 pcolumn1-type[,...])
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS
INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://s3-bucket/prefix'
```
為Hudi分割槽表新增分割槽,請使用`ALTER TABLE ADD PARTITION`命令,其中`LOCATION`引數指向屬於分割槽的Amazon S3子資料夾。
使用如下命令新增分割槽
```sql
ALTER TABLE tbl_name
ADD IF NOT EXISTS PARTITION(pcolumn1=pvalue1[,...])
LOCATION 's3://s3-bucket/prefix/partition-path'
```
Apache Hudi最早被AWS EMR官方整合,然後原生整合到AWS上不同雲產品,如Athena、RedShift,可以看到Hudi作為資料湖框架在雲上發揮的作用越來越大,生態也越來越完善,也歡迎廣大開發者參與Apache Hudi社群,一起建設更好的資料湖,Github傳送門[https://github.com/apache/hudi](https://github.com/apach