使用 ZSTD 壓縮層級 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 ZSTD 壓縮層級

Zstandard 即時資料壓縮演算法是一種提供高壓縮比的快速壓縮演算法。Zstandard (ZSTD) 程式庫是開放原始碼軟體,使用 BSD 授權。Athena 支援讀取和寫入 ZStandard 壓縮的 ORC、Parquet 和文字檔案資料。

您可以使用 ZSTD 壓縮級別根據自己的要求調整壓縮比和速度。ZSTD 庫支援從 1 到 22 的壓縮級別。Athena 預設使用 ZSTD 壓縮級別 3。

壓縮級別在壓縮速度和達到的壓縮量之間提供了細微的權衡。壓縮級別越低,速度越快,但檔案大小更大。例如,如果速度最重要,則可以使用級別 1,如果大小最重要,則可以使用級別 22。級別 3 適用於許多使用案例,且為預設值。請謹慎使用大於 19 的級別,因為這些級別需要更多的記憶體。ZSTD 庫還提供負壓縮級別,其可擴展壓縮速度和比率的範圍。如需詳細資訊,請參閱 Zstandard 壓縮 RFC

豐富的壓縮級別為微調提供了大量機會。但是,請確保在決定壓縮級別時測量資料並考慮權衡。建議使用預設級別 3,或 6 到 9 之間的級別,以便在壓縮速度與壓縮資料大小之間取得合理的權衡。對於大小最重要且壓縮速度不是問題的情況,預留級別 20 或更高。

考量與限制

在 Athena 中使用 ZSTD 壓縮級別時,請考慮下列幾點。

  • 只有 Athena 引擎版本 3 中才支援 ZSTD compression_level 屬性。

  • ALTER TABLECREATE TABLECREATE TABLE AS (CTAS) 以及 UNLOAD 陳述式支援 ZSTD compression_level 屬性。

  • compression_level 屬性是選用屬性。

  • 只有 ZSTD 壓縮才支援 compression_level 屬性。

  • 可能的壓縮級別為 1 到 22。

  • 預設壓縮級別為 3。

如需有關 Athena 中 Apache Hive ZSTD 壓縮支援的資訊,請參閱 使用 Hive 資料表壓縮。如需有關 Athena 中 Apache Iceberg ZSTD 壓縮支援的資訊,請參閱 使用 Iceberg 資料表壓縮

指定 ZSTD 壓縮層級

若要指定 ALTER TABLECREATE TABLECREATE TABLE ASUNLOAD 陳述式的 ZSTD 壓縮級別,請使用 compression_level 屬性。若要指定 ZSTD 壓縮本身,您必須使用陳述式語法所使用的單獨壓縮屬性。

ALTER TABLE SET TBLPROPERTIES 陳述式 SET TBLPROPERTIES 子句中,使用 'write.compression' = ' ZSTD''parquet.compression' = 'ZSTD' 指定 ZSTD 壓縮。然後使用 compression_level 屬性來指定 1 到 22 之間的值 (例如,'compression_level' = '5')。如果您沒有指定壓縮級別屬性,則壓縮級別會預設為 3。

範例

下列範例會修改資料表 existing_table,以使用具有 ZSTD 壓縮和 ZSTD 壓縮級別 4 的 Parquet 檔案格式。請注意,在 TBLPROPERTIES子句中,壓縮層級值必須以字串輸入,而不是整數,因此必須以單引號或雙引號括住。

ALTER TABLE existing_table SET TBLPROPERTIES ('parquet.compression' = 'ZSTD', 'compression_level' = '4')

CREATE TABLE陳述式TBLPROPERTIES子句中,指定 'write.compression' = 'ZSTD''parquet.compression' = 'ZSTD',然後使用 compression_level = compression_level,並將 1 到 22 的值指定為字串。如果未指定 compression_level 屬性,則預設壓縮級別為 3。

範例

下列範例使用 ZSTD 壓縮和 ZSTD 壓縮級別 4 建立 Parquet 檔案格式的資料表。

CREATE EXTERNAL TABLE new_table ( `col0` string COMMENT '', `col1` string COMMENT '' ) STORED AS PARQUET LOCATION 's3://amzn-s3-demo-bucket/' TBLPROPERTIES ('write.compression' = 'ZSTD', 'compression_level' = '4')

CREATE TABLE AS陳述式WITH子句中,指定 write_compression = 'ZSTD'、 或 parquet_compression = 'ZSTD',然後使用 compression_level = compression_level,並將 1 到 22 的值指定為整數。如果未指定 compression_level 屬性,則預設壓縮級別為 3。

範例

下列 CTAS 範例使用 ZSTD 壓縮和 ZSTD 壓縮級別 4,將 Parquet 指定為檔案格式。請注意,在 WITH子句中,壓縮層級的值必須指定為整數,而非字串。

CREATE TABLE new_table WITH ( format = 'PARQUET', write_compression = 'ZSTD', compression_level = 4) AS SELECT * FROM old_table

UNLOAD陳述式WITH子句中,指定 compression = 'ZSTD',然後使用 compression_level = compression_level,並將 1 到 22 的值指定為整數。如果未指定 compression_level 屬性,則預設壓縮級別為 3。

範例

下列範例會使用 Parquet 檔案格式、ZSTD 壓縮和 ZSTD 壓縮級別 4,將查詢結果卸載到指定的位置。

UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)