本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
UNLOAD概念
語法
UNLOAD (SELECT statement) TO 's3://bucket-name/folder' WITH ( option = expression [, ...] )
其中 option
是
{ partitioned_by = ARRAY[ col_name[,…] ] | format = [ '{ CSV | PARQUET }' ] | compression = [ '{ GZIP | NONE }' ] | encryption = [ '{ SSE_KMS | SSE_S3 }' ] | kms_key = '<string>' | field_delimiter ='<character>' | escaped_by = '<character>' | include_header = ['{true, false}'] | max_file_size = '<value>' | }
參數
- SELECT 陳述式
-
用於從一或多個 Timestream for LiveAnalytics 資料表選取和擷取資料的查詢陳述式。
(SELECT column 1, column 2, column 3 from database.table where measure_name = "ABC" and timestamp between ago (1d) and now() )
- TO 子句
-
TO 's3://bucket-name/folder'
或
TO 's3://access-point-alias/folder'
UNLOAD
陳述式中的TO
子句指定查詢結果輸出的目的地。您需要提供完整路徑,包括 Amazon S3 儲存貯體名稱或 Amazon S3 access-point-alias,其中 Amazon S3 上的資料夾位置為 Timestream for LiveAnalytics 寫入輸出檔案物件。S3 儲存貯體應該由相同帳戶和相同區域擁有。除了查詢結果集之外,Timestream for LiveAnalytics 還會將資訊清單和中繼資料檔案寫入指定的目的地資料夾。 - PARTITIONED_BY 子句
-
partitioned_by = ARRAY [col_name[,…] , (default: none)
partitioned_by
子句用於查詢,以精細地分組和分析資料。當您將查詢結果匯出至 S3 儲存貯體時,您可以選擇根據選取查詢中的一或多個資料欄來分割資料。分割資料時,匯出的資料會根據分割區資料欄分為子集,每個子集都存放在個別的資料夾中。在包含匯出資料的結果資料夾中,folder/results/partition column = partition value/
會自動建立子資料夾。不過請注意,分割的資料欄不包含在輸出檔案中。partitioned_by
不是語法中的必要子句。如果您選擇在沒有分割的情況下匯出資料,則可以在語法中排除 子句。假設您正在監控網站的點擊串流資料,並擁有 5 個流量通道,即
direct
、Social Media
、Organic Search
、Other
和Referral
。匯出資料時,您可以選擇使用資料欄 分割資料Channel
。在您的資料資料夾中,s3://bucketname/results
您會有五個資料夾,每個資料夾都有各自的頻道名稱,例如,s3://bucketname/results/channel=Social Media/.
在此資料夾中,您會找到透過Social Media
頻道登陸網站的所有客戶的資料。同樣地,您還有其他資料夾可供其餘頻道使用。依頻道資料欄分割的匯出資料
- FORMAT
-
format = [ '{ CSV | PARQUET }' , default: CSV
用來指定寫入 S3 儲存貯體之查詢結果格式的關鍵字。您可以使用逗號 (,) 作為預設分隔符號,以逗號分隔值 (CSV) 匯出資料,或以 Apache Parquet 格式匯出資料,這是用於分析的有效開放資料欄儲存格式。
- COMPRESSION
-
compression = [ '{ GZIP | NONE }' ], default: GZIP
您可以使用壓縮演算法 GZIP 壓縮匯出的資料,或指定
NONE
選項使其取消壓縮。 - ENCRYPTION
-
encryption = [ '{ SSE_KMS | SSE_S3 }' ], default: SSE_S3
Amazon S3 上的輸出檔案會使用您選取的加密選項進行加密。除了您的資料之外,資訊清單和中繼資料檔案也會根據您選取的加密選項進行加密。我們目前支援 SSE_S3 和 SSE_KMS 加密。SSE_S3 是一種伺服器端加密,Amazon S3 會使用 256 位元進階加密標準 (AES) 加密來加密資料。SSE_KMS 是一種伺服器端加密,可使用客戶管理的金鑰加密資料。
- KMS_KEY
-
kms_key = '<string>'
KMS 金鑰是客戶定義的金鑰,用於加密匯出的查詢結果。KMS Key 由 AWS Key Management Service (AWS KMS) 安全管理,用於加密 Amazon S3 上的資料檔案。
- FIELD_DELIMITER
-
field_delimiter ='<character>' , default: (,)
以 CSV 格式匯出資料時,此欄位會指定單一 ASCII 字元,用於分隔輸出檔案中的欄位,例如管道字元 (|)、逗號 (,) 或索引標籤 (/t)。CSV 檔案的預設分隔符號為逗號字元。如果資料中的值包含選擇的分隔符號,則會以引號字元引述分隔符號。例如,如果您資料中的值包含
Time,stream
,則會將此值引述為匯出資料"Time,stream"
中的 。Timestream for LiveAnalytics 使用的引號字元是雙引號 (")。FIELD_DELIMITER
如果您想要在 CSV 中包含標頭,請避免指定字元 (ASCII 13,十六進位0D
,文字 '\r') 或換行字元 (ASCII 10,十六進位 0A,文字 '\n'),因為這樣會阻止許多剖析器在產生的 CSV 輸出中正確剖析標頭。 - ESCAPED_BY
-
escaped_by = '<character>', default: (\)
以 CSV 格式匯出資料時,此欄位會指定在寫入 S3 儲存貯體的資料檔案中應視為逸出字元的字元。逸出會在下列情況下發生:
-
如果值本身包含引號字元 ("),則會使用逸出字元逸出。例如,如果值為
Time"stream
,其中 (\) 是設定的逸出字元,則會以 逸出Time\"stream
。 -
如果值包含設定的逸出字元,則會逸出。例如,如果值為
Time\stream
,則會以 的形式逸出Time\\stream
。
注意
如果匯出的輸出包含類似陣列、資料列或 Timeseries 的複雜資料類型,則會序列化為 JSON 字串。以下是範例。
資料類型 實際值 如何逸出 CSV 格式 【序列化 JSON 字串】 的值 陣列
[ 23,24,25 ]
"[23,24,25]"
Row
( x=23.0, y=hello )
"{\"x\":23.0,\"y\":\"hello\"}"
時間序列
[ ( time=1970-01-01 00:00:00.000000010, value=100.0 ),( time=1970-01-01 00:00:00.000000012, value=120.0 ) ]
"[{\"time\":\"1970-01-01 00:00:00.000000010Z\",\"value\":100.0},{\"time\":\"1970-01-01 00:00:00.000000012Z\",\"value\":120.0}]"
-
- INCLUDE_HEADER
-
include_header = 'true' , default: 'false'
以 CSV 格式匯出資料時,此欄位可讓您將資料欄名稱納入匯出的 CSV 資料檔案的第一列。
接受的值為 'true' 和 'false',預設值為 'false'。文字轉換選項,例如
escaped_by
和 也field_delimiter
適用於標頭。注意
包含標頭時,請務必不要選取歸位字元 (ASCII 13,十六進位 0D,文字 '\r') 或換行字元 (ASCII 10,十六進位 0A,文字 '\n') 作為
FIELD_DELIMITER
,因為這會阻止許多剖析器在產生的 CSV 輸出中正確剖析標頭。 - MAX_FILE_SIZE
-
max_file_size = 'X[MB|GB]' , default: '78GB'
此欄位會指定
UNLOAD
陳述式在 Amazon S3 中建立的檔案大小上限。UNLOAD
陳述式可以建立多個檔案,但寫入 Amazon S3 的每個檔案的大小上限大約是此欄位中指定的大小。欄位的值必須介於 16 MB 和 78 GB 之間,包括在內。您可以指定整數,例如
12GB
或小數,例如0.5GB
或24.7MB
。預設值為 78 GB。實際檔案大小是在寫入檔案時近似的,因此實際大小上限可能不等於您指定的數字。
寫入 S3 儲存貯體的內容為何?
對於每個成功執行的 UNLOAD 查詢,Timestream for LiveAnalytics 會將您的查詢結果、中繼資料檔案和資訊清單檔案寫入 S3 儲存貯體。如果您已分割資料,則結果資料夾中會有所有分割區資料夾。清單檔案包含由 UNLOAD 命令寫入的檔案清單。中繼資料檔案包含描述寫入資料之特性、屬性和屬性的資訊。
匯出的檔案名稱是什麼?
匯出的檔案名稱包含兩個元件,第一個元件是 queryID,第二個元件是唯一的識別符。
CSV 檔案
S3://bucket_name/results/<queryid>_<UUID>.csv S3://bucket_name/results/<partitioncolumn>=<partitionvalue>/<queryid>_<UUID>.csv
壓縮的 CSV 檔案
S3://bucket_name/results/<partitioncolumn>=<partitionvalue>/<queryid>_<UUID>.gz
Parquet 檔案
S3://bucket_name/results/<partitioncolumn>=<partitionvalue>/<queryid>_<UUID>.parquet
中繼資料和清單檔案
S3://bucket_name/<queryid>_<UUID>_manifest.json S3://bucket_name/<queryid>_<UUID>_metadata.json
由於 CSV 格式的資料儲存在檔案層級,當您在匯出至 S3 時壓縮資料時,檔案會有「.gz」副檔名。不過,Parquet 中的資料會在資料欄層級壓縮,因此即使您在匯出時壓縮資料, 檔案仍會有 .parquet 副檔名。
每個檔案包含哪些資訊?
清單檔案
資訊清單檔案提供使用 UNLOAD 執行匯出的檔案清單資訊。清單檔案可在提供的 S3 儲存貯體中使用,檔案名稱為:s3://<bucket_name>/<queryid>_<UUID>_manifest.json
。資訊清單檔案將包含結果資料夾中檔案的 URL、個別檔案的記錄數目和大小,以及查詢中繼資料 (這是匯出至 S3 以進行查詢的總位元組數和總列數)。
{ "result_files": [ { "url":"s3://my_timestream_unloads/ec2_metrics/AEDAGANLHLBH4OLISD3CVOZZRWPX5GV2XCXRBKCVD554N6GWPWWXBP7LSG74V2Q_1448466917_szCL4YgVYzGXj2lS.gz", "file_metadata": { "content_length_in_bytes": 32295, "row_count": 10 } }, { "url":"s3://my_timestream_unloads/ec2_metrics/AEDAGANLHLBH4OLISD3CVOZZRWPX5GV2XCXRBKCVD554N6GWPWWXBP7LSG74V2Q_1448466917_szCL4YgVYzGXj2lS.gz", "file_metadata": { "content_length_in_bytes": 62295, "row_count": 20 } }, ], "query_metadata": { "content_length_in_bytes": 94590, "total_row_count": 30, "result_format": "CSV", "result_version": "Amazon Timestream version 1.0.0" }, "author": { "name": "Amazon Timestream", "manifest_file_version": "1.0" } }
中繼資料
中繼資料檔案提供有關資料集的其他資訊,例如資料欄名稱、資料欄類型和結構描述。中繼資料檔案可在提供的 S3 儲存貯體中使用,檔案名稱為:S3://bucket_name/<queryid>_<UUID>_metadata.json
以下是中繼資料檔案的範例。
{ "ColumnInfo": [ { "Name": "hostname", "Type": { "ScalarType": "VARCHAR" } }, { "Name": "region", "Type": { "ScalarType": "VARCHAR" } }, { "Name": "measure_name", "Type": { "ScalarType": "VARCHAR" } }, { "Name": "cpu_utilization", "Type": { "TimeSeriesMeasureValueColumnInfo": { "Type": { "ScalarType": "DOUBLE" } } } } ], "Author": { "Name": "Amazon Timestream", "MetadataFileVersion": "1.0" } }
在中繼資料檔案中共用的資料欄資訊與SELECT
查詢查詢的查詢API回應中ColumnInfo
傳送的結構相同。
結果
結果資料夾包含 Apache Parquet 或 CSV 格式的匯出資料。
範例
當您透過 Query API 提交如下所示的UNLOAD
查詢時,
UNLOAD(SELECT user_id, ip_address, event, session_id, measure_name, time, query, quantity, product_id, channel FROM sample_clickstream.sample_shopping WHERE time BETWEEN ago(2d) AND now()) TO 's3://my_timestream_unloads/withoutpartition/' WITH ( format='CSV', compression='GZIP')
UNLOAD
查詢回應將有 1 列 * 3 欄。這 3 個資料欄為:
-
BIGINT 類型的資料列 - 指示匯出的資料列數目
-
VARCHAR metadataFile 類型 - 即匯出的中繼資料檔案的 S3 URI
-
VARCHAR manifestFile 類型 - 即匯出清單檔案的 S3 URI
您會從 Query API 收到下列回應:
{ "Rows": [ { "Data": [ { "ScalarValue": "20" # No of rows in output across all files }, { "ScalarValue": "s3://my_timestream_unloads/withoutpartition/AEDAAANGH3D7FYHOBQGQQMEAISCJ45B42OWWJMOT4N6RRJICZUA7R25VYVOHJIY_<UUID>_metadata.json" #Metadata file }, { "ScalarValue": "s3://my_timestream_unloads/withoutpartition/AEDAAANGH3D7FYHOBQGQQMEAISCJ45B42OWWJMOT4N6RRJICZUA7R25VYVOHJIY_<UUID>_manifest.json" #Manifest file } ] } ], "ColumnInfo": [ { "Name": "rows", "Type": { "ScalarType": "BIGINT" } }, { "Name": "metadataFile", "Type": { "ScalarType": "VARCHAR" } }, { "Name": "manifestFile", "Type": { "ScalarType": "VARCHAR" } } ], "QueryId": "AEDAAANGH3D7FYHOBQGQQMEAISCJ45B42OWWJMOT4N6RRJICZUA7R25VYVOHJIY", "QueryStatus": { "ProgressPercentage": 100.0, "CumulativeBytesScanned": 1000, "CumulativeBytesMetered": 10000000 } }
資料類型
此UNLOAD
陳述式支援除 time
和 支援的資料類型所述的 Timestream for LiveAnalytics 查詢語言的所有資料類型unknown
。