本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 ZSTD 壓縮層級
Zstandard 即時資料壓縮演算法
您可以使用 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 TABLE
、CREATE TABLE
、CREATE TABLE AS
(CTAS) 以及UNLOAD
陳述式支援 ZSTDcompression_level
屬性。 -
compression_level
屬性是選用屬性。 -
只有 ZSTD 壓縮才支援
compression_level
屬性。 -
可能的壓縮級別為 1 到 22。
-
預設壓縮級別為 3。
如需有關 Athena 中 Apache Hive ZSTD 壓縮支援的資訊,請參閱 使用 Hive 資料表壓縮。如需有關 Athena 中 Apache Iceberg ZSTD 壓縮支援的資訊,請參閱 使用 Iceberg 資料表壓縮。
指定 ZSTD 壓縮層級
若要指定 ALTER TABLE
、CREATE
TABLE
、CREATE TABLE AS
和 UNLOAD
陳述式的 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 =
,並將 1 到 22 的值指定為字串。如果未指定 compression_level
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 =
,並將 1 到 22 的值指定為整數。如果未指定 compression_level
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 =
,並將 1 到 22 的值指定為整數。如果未指定 compression_level
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)