

如需與 Amazon Timestream for LiveAnalytics 類似的功能，請考慮使用 Amazon Timestream for InfluxDB。它提供簡化的資料擷取和單一位數毫秒查詢回應時間，以進行即時分析。[在這裡](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)進一步了解。

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

# 使用 UNLOAD 從 Timestream for LiveAnalytics 將查詢結果匯出至 S3
<a name="export-unload"></a>

Amazon Timestream for LiveAnalytics 現在可讓您使用 `UNLOAD`陳述式，以經濟實惠且安全的方式將查詢結果匯出至 Amazon S3。您現在可以使用 `UNLOAD`陳述式，以 Apache Parquet 或逗號分隔值 (CSV) 格式將時間序列資料匯出至選取的 S3 儲存貯體，這可讓您靈活地與其他 服務存放、合併和分析時間序列資料。`UNLOAD` 陳述式可讓您以壓縮方式匯出資料，以減少傳輸的資料和所需的儲存空間。 在匯出資料時， `UNLOAD`也支援根據選取的屬性進行分割、改善效能，並減少下游服務存取資料的處理時間。此外，您可以使用 Amazon S3 受管金鑰 (SSE-S3) 或 AWS Key Management Service (AWS KMS) 受管金鑰 (SSE-KMS) 來加密匯出的資料。

## 從 Timestream for LiveAnalytics 的 UNLOAD 優點
<a name="export-unload-benefits"></a>

使用 `UNLOAD`陳述式的主要優點如下。
+ **操作簡易** – 使用 `UNLOAD`陳述式，您可以在單一查詢請求中以 Apache Parquet 或 CSV 格式匯出 GB 的資料，提供彈性，為您的下游處理需求選擇最適合的格式，並更輕鬆地建置資料湖。
+ **安全且符合成本效益** – `UNLOAD`陳述式可讓您以壓縮方式將資料匯出至 S3 儲存貯體，並使用客戶受管金鑰加密 (SSE-KMS 或 SSE\$1S3) 資料，降低資料儲存成本並防止未經授權的存取。
+ **效能** – 使用 `UNLOAD`陳述式，您可以在匯出至 S3 儲存貯體時分割資料。分割資料可讓下游服務平行處理資料，縮短處理時間。此外，下游服務只能處理所需的資料，減少所需的處理資源，進而降低相關的成本。

## 從 Timestream for LiveAnalytics 的 UNLOAD 使用案例
<a name="export-unload-use-cases"></a>

您可以使用 `UNLOAD`陳述式，將資料寫入 S3 儲存貯體至下列項目。
+ **建置資料倉儲** – 您可以將 GB 的查詢結果匯出至 S3 儲存貯體，並更輕鬆地將時間序列資料新增至資料湖。您可以使用 Amazon Athena 和 Amazon Redshift 等服務，將您的時間序列資料與其他相關資料結合，以衍生複雜的商業洞見。
+ **建置 AI 和 ML 資料管道** – `UNLOAD`陳述式可讓您輕鬆地為機器學習模型建置資料管道，以存取時間序列資料，讓您更輕鬆地將時間序列資料與 Amazon SageMaker 和 Amazon EMR 等服務搭配使用。
+ **簡化 ETL 處理** – 將資料匯出至 S3 儲存貯體可簡化對資料執行擷取、轉換、載入 (ETL) 操作的程序，讓您能夠順暢地使用第三方工具 AWS 或服務，例如 AWS Glue 來處理和轉換資料。

# UNLOAD 概念
<a name="export-unload-concepts"></a>

## 語法
<a name="export-unload-concepts-syntax"></a>

```
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>'
 | }
```

## Parameters
<a name="export-unload-concepts-parameters"></a>

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 上資料夾位置的 Amazon S3 access-point-alias，其中 Timestream for LiveAnalytics 會寫入輸出檔案物件。S3 儲存貯體應該由同一帳戶和同一區域擁有。除了查詢結果集之外，Timestream for LiveAnalytics 還會將資訊清單和中繼資料檔案寫入指定的目的地資料夾。

PARTITIONED\$1BY 子句  

```
partitioned_by = ARRAY [col_name[,…] , (default: none)
```
`partitioned_by` 子句用於查詢中，以精細層級分組和分析資料。當您將查詢結果匯出至 S3 儲存貯體時，您可以選擇根據選取查詢中的一或多個資料欄來分割資料。分割資料時，匯出的資料會根據分割區資料欄分割為子集，而每個子集會存放在個別的資料夾中。在包含匯出資料的結果資料夾中，`folder/results/partition column = partition value/`會自動建立子資料夾。不過，請注意，分割的資料欄不包含在輸出檔案中。  
`partitioned_by` 不是語法中的強制性子句。如果您選擇在沒有分割的情況下匯出資料，則可以在語法中排除 子句。  

**Example**  
假設您正在監控網站的點擊串流資料，並擁有 5 個流量通道，即 `direct`、`Social Media`、`Other`、 `Organic Search`和 `Referral`。匯出資料時，您可以選擇使用資料欄 分割資料`Channel`。在您的資料資料夾 中`s3://bucketname/results`，您會有五個資料夾，每個資料夾都有各自的頻道名稱，例如，`s3://bucketname/results/channel=Social Media/.`在此資料夾中，您會透過`Social Media`頻道找到所有登陸您網站之客戶的資料。同樣地，您還有其他資料夾可供其餘頻道使用。
依頻道資料欄分割的匯出資料  

![\[Folder structure showing channels: Direct, Organic search, Other, Referral, and Social media.\]](http://docs.aws.amazon.com/zh_tw/timestream/latest/developerguide/images/unload-results.png)


FORMAT  

```
format = [ '{ CSV | PARQUET }' , default: CSV
```
用於指定寫入 S3 儲存貯體之查詢結果格式的關鍵字。您可以使用逗號 (，) 做為預設分隔符號，或 Apache Parquet 格式的有效開放單欄式儲存格式，將資料匯出為逗號分隔值 (CSV)。

壓縮  

```
compression = [ '{ GZIP | NONE }' ], default: GZIP
```
您可以使用壓縮演算法 GZIP 壓縮匯出的資料，或指定 `NONE`選項將其解壓縮。

ENCRYPTION  

```
encryption = [ '{ SSE_KMS | SSE_S3 }' ], default: SSE_S3
```
Amazon S3 上的輸出檔案會使用您選取的加密選項進行加密。除了您的資料之外，資訊清單和中繼資料檔案也會根據您選取的加密選項進行加密。我們目前支援 SSE\$1S3 和 SSE\$1KMS 加密。SSE\$1S3 是一種伺服器端加密，Amazon S3 會使用 256 位元進階加密標準 (AES) 加密來加密資料。SSE\$1KMS 是一種伺服器端加密，可使用客戶受管金鑰加密資料。

KMS\$1KEY  

```
kms_key = '<string>'
```
KMS 金鑰是客戶定義的金鑰，用於加密匯出的查詢結果。KMS Key 由 AWS Key Management Service (AWS KMS) 安全管理，並用於加密 Amazon S3 上的資料檔案。

FIELD\$1DELIMITER  

```
field_delimiter ='<character>' , default: (,)
```
以 CSV 格式匯出資料時，此欄位會指定單一 ASCII 字元，用於分隔輸出檔案中的欄位，例如管道字元 (\$1)、逗號 (，) 或標籤 (/t)。CSV 檔的預設分隔符號為逗號字元。如果資料中的值包含選擇的分隔符號，則會以引號字元引用分隔符號。例如，如果您資料中的 值包含 `Time,stream`，則會在匯出的資料`"Time,stream"`中引用此值。Timestream for LiveAnalytics 使用的引號字元是雙引號 (")。  
`FIELD_DELIMITER` 如果您想要在 CSV 中包含標頭，請避免指定換行字元 (ASCII 13、十六進位 `0D`、文字 '\$1r') 或換行字元 (ASCII 10、十六進位 0A、文字 '\$1n') 做為 ，因為這會阻止許多剖析器在產生的 CSV 輸出中正確剖析標頭。

ESCAPED\$1BY  

```
escaped_by = '<character>', default: (\)
```
以 CSV 格式匯出資料時，此欄位會指定在寫入 S3 儲存貯體的資料檔案中應視為逸出字元的字元。逸出發生在下列案例中：  

1. 如果值本身包含引號字元 (")，則會使用逸出字元逸出。例如，如果值為 `Time"stream`，其中 (\$1) 是設定的逸出字元，則會將其逸出為 `Time\"stream`。

1. 如果值包含設定的逸出字元，則會逸出。例如，如果值為 `Time\stream`，則會以 逸出`Time\\stream`。
如果匯出的輸出在類似陣列、資料列或時間序列中包含複雜的資料類型，則會序列化為 JSON 字串。以下是範例。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/timestream/latest/developerguide/export-unload-concepts.html)

INCLUDE\$1HEADER  

```
include_header = 'true' , default: 'false'
```
以 CSV 格式匯出資料時，此欄位可讓您將資料欄名稱包含為匯出 CSV 資料檔案的第一列。  
接受的值為「true」和「false」，預設值為「false」。文字轉換選項，例如 `escaped_by`和 也`field_delimiter`適用於標頭。  
包含標頭時，請務必不要選取換行字元 (ASCII 13、十六進位 0D、文字 '\$1r') 或換行字元 (ASCII 10、十六進位 0A、文字 '\$1n') 做為 `FIELD_DELIMITER`，因為這會阻止許多剖析器在產生的 CSV 輸出中正確剖析標頭。

MAX\$1FILE\$1SIZE  

```
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 儲存貯體的內容為何？
<a name="export-unload-common-questions-what-is-written"></a>

對於每個成功執行的 UNLOAD 查詢，Timestream for LiveAnalytics 會將您的查詢結果、中繼資料檔案和資訊清單檔案寫入 S3 儲存貯體。如果您已分割資料，則結果資料夾中會有所有分割區資料夾。資訊清單檔案包含 UNLOAD 命令所寫入的檔案清單。中繼資料檔案包含描述寫入資料之特性、屬性和屬性的資訊。

## 匯出的檔案名稱是什麼？
<a name="export-unload-common-questions-what-is-filename"></a>

匯出的檔案名稱包含兩個元件，第一個元件是 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 副檔名。

## 每個檔案包含哪些資訊？
<a name="export-unload-common-questions-what-information"></a>

### 清單檔案
<a name="export-unload-common-questions-what-information-manifest"></a>

資訊清單檔案提供使用 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" 
  }
}
```

### 中繼資料
<a name="export-unload-common-questions-what-information-metadata"></a>

中繼資料檔案提供有關資料集的其他資訊，例如資料欄名稱、資料欄類型和結構描述。中繼資料檔案可在提供的 S3 儲存貯體中使用，檔案名稱為：S3：//bucket\$1name/<queryid>\$1<UUID>\$1metadata.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`傳送的結構相同。

### 結果
<a name="export-unload-common-questions-what-information-results"></a>

結果資料夾包含以 Apache Parquet 或 CSV 格式匯出的資料。

## 範例
<a name="export-unload-example-short"></a>

當您透過`UNLOAD`查詢 API 提交如下所示的查詢時，

```
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 列 \$1 3 欄。這 3 個資料欄為：
+ BIGINT 類型的資料列 - 指出匯出的資料列數
+ metadataFile 類型 VARCHAR - 即匯出的中繼資料檔案的 S3 URI
+ manifestFile 類型 VARCHAR - 這是匯出的資訊清單檔案的 S3 URI

您將會從查詢 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
    }
}
```

## 資料類型
<a name="export-unload-data-types-explanation"></a>

`UNLOAD` 陳述式支援 中所述的所有 Timestream for LiveAnalytics 查詢語言資料類型，但 `time`和 [支援的資料類型](supported-data-types.md)除外`unknown`。

# 從 Timestream for LiveAnalytics 的 UNLOAD 先決條件
<a name="export-unload-prerequisites"></a>

以下是`UNLOAD`使用 Timestream for LiveAnalytics 將資料寫入 S3 的先決條件。
+ 您必須具有從 Timestream for LiveAnalytics 資料表 （要在 `UNLOAD`命令中使用的） 讀取資料的許可。
+ 您必須在與 Timestream for LiveAnalytics 資源相同的 AWS 區域中擁有 Amazon S3 儲存貯體。
+ 對於選取的 S3 儲存貯體，請確定 [S3 儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)也具有允許 Timestream for LiveAnalytics 匯出資料的許可。
+ 用於執行`UNLOAD`查詢的登入資料必須具有必要的 AWS Identity and Access Management (IAM) 許可，允許 Timestream for LiveAnalytics 將資料寫入 S3。範例政策如下：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "timestream:Select",
                "timestream:ListMeasures",
                "timestream:WriteRecords",
                "timestream:Unload"
            ],
            "Resource": "arn:aws:timestream:us-east-2:111122223333:database/database_name/table/table_name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketAcl",
                "s3:PutObject",
                "s3:GetObject",
                "s3:AbortMultipartUpload"
            ],
            "Resource": [
                "arn:aws:s3:::S3_Bucket_Created",
                "arn:aws:s3:::S3_Bucket_Created/*"
            ]
        }
    ]
}
```

------

如需這些 S3 寫入許可的其他內容，請參閱 [Amazon Simple Storage Service 指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions)。如果您使用 KMS 金鑰來加密匯出的資料，請參閱以下內容，了解所需的其他 IAM 政策。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
            "kms:DescribeKey",
            "kms:Decrypt",
            "kms:GenerateDataKey*"
        ],
        "Resource": "arn:aws:kms:us-east-2:111122223333:key/*",
        "Condition": {
            "ForAnyValue:StringLike": {
                "kms:ResourceAliases": "alias/Alias_For_Generated_Key"
            }
        }
    }, {
        "Effect": "Allow",
        "Action": [
            "kms:CreateGrant"
        ],
        "Resource": "arn:aws:kms:us-east-2:111122223333:key/*",
        "Condition": {
            "ForAnyValue:StringEquals": {
                "kms:EncryptionContextKeys": "aws:timestream:database_name"
            },
            "Bool": {
                "kms:GrantIsForAWSResource": true
            },
            "StringLike": {
                "kms:ViaService": "timestream.us-east-2.amazonaws.com"
            },
            "ForAnyValue:StringLike": {
                "kms:ResourceAliases": "alias/Alias_For_Generated_Key"
            }
        }
    }
]
}
```

------

# 從 Timestream for LiveAnalytics 的 UNLOAD 最佳實務
<a name="export-unload-best-practices"></a>

以下是與 UNLOAD 命令相關的最佳實務。
+ 使用 `UNLOAD`命令可匯出至 S3 儲存貯體的資料量不受限。不過，查詢會在 60 分鐘內逾時，建議您在單一查詢中匯出不超過 60GB 的資料。如果您需要匯出超過 60GB 的資料，請將任務分割成多個查詢。
+ 雖然您可以將數千個請求傳送至 S3 以上傳資料，但建議您將寫入操作平行處理為多個 S3 字首。請參閱[此處](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html)的文件。當多個讀取器/寫入器存取相同的資料夾時，可能會調節 S3 API 呼叫率。
+ 鑑於定義字首的 S3 金鑰長度限制，我們建議在 10-15 個字元內使用儲存貯體和資料夾名稱，特別是在使用 `partitioned_by`子句時。
+ 當您收到包含 `UNLOAD`陳述式的查詢的 4XX 或 5XX 時，可能會將部分結果寫入 S3 儲存貯體。LiveAnalytics 的 Timestream 不會刪除儲存貯體中的任何資料。在使用相同的 S3 目的地執行另一個`UNLOAD`查詢之前，建議您手動刪除失敗查詢建立的檔案。您可以使用對應的 來識別由失敗查詢寫入的檔案`QueryExecutionId`。對於失敗的查詢，Timestream for LiveAnalytics 不會將資訊清單檔案匯出至 S3 儲存貯體。
+ LiveAnalytics 的 Timestream 使用分段上傳將查詢結果匯出至 S3。當您從 Timestream for LiveAnalytics 收到包含 UNLOAD 陳述式的查詢的 4XX 或 5XX 時，Timestream for LiveAnalytics 會盡最大努力中止分段上傳，但可能會留下一些不完整的部分。因此，我們建議您遵循[此處](https://aws.amazon.com/blogs/aws-cloud-financial-management/discovering-and-deleting-incomplete-multipart-uploads-to-lower-amazon-s3-costs/)的準則，在 S3 儲存貯體中設定未完成分段上傳的自動清除。

## 使用 CSV 剖析器以 CSV 格式存取資料的建議
<a name="export-unload-common-questions-what-information-recommendations-csv"></a>
+ CSV 剖析器不允許您在分隔符號、逸出和引號字元中具有相同的字元。
+ 有些 CSV 剖析器無法解譯複雜的資料類型，例如 Arrays，我們建議您透過 JSON 還原序列化程式解譯這些資料類型。

## 以 Parquet 格式存取資料的建議
<a name="export-unload-common-questions-what-information-recommendations-parquet"></a>

1. 如果您的使用案例需要結構描述 aka 資料欄名稱中的 UTF-8 字元支援，我們建議您使用 [Parquet-mr 程式庫](https://github.com/apache/parquet-mr)。

1. 結果中的時間戳記會以 12 位元組整數 (INT96) 表示

1. 時間序列會以 表示`array<row<time, value>>`，其他巢狀結構將使用 Parquet 格式支援的對應資料類型

## 使用 partition\$1by 子句
<a name="export-unload-best-practices-partition-by"></a>
+ 欄位中使用的資料欄`partitioned_by`應該是選取查詢中的最後一個資料欄。如果在 `partitioned_by` 欄位中使用多個資料欄，則資料欄應該是選取查詢中的最後一個資料欄，且順序與 `partition_by` 欄位中使用的順序相同。
+ 用於分割資料的資料欄值 (`partitioned_by` 欄位） 只能包含 ASCII 字元。雖然 LiveAnalytics 的 Timestream 在值中允許 UTF-8 字元，但 S3 僅支援 ASCII 字元做為物件索引鍵。

# 從 Timestream for LiveAnalytics 的 UNLOAD 範例使用案例
<a name="export-unload-example-use-case"></a>

假設您正在監控電子商務網站的使用者工作階段指標、流量來源和產品購買。您正在使用 Timestream for LiveAnalytics 來衍生使用者行為、產品銷售的即時洞見，並在流量管道 （組織搜尋、社交媒體、直接流量、付費行銷活動等） 上執行行銷分析，以協助客戶前往網站。

**Topics**
+ [匯出不含任何分割區的資料](#export-unload-example-sample-1)
+ [依頻道分割資料](#export-unload-example-sample-2)
+ [依事件分割資料](#export-unload-example-sample-3)
+ [依頻道和事件分割資料](#export-unload-example-sample-4)
+ [資訊清單和中繼資料檔案](#export-unload-example-manifest-metadata)
+ [使用 Glue 爬蟲程式建置 Glue Data Catalog](#export-unload-example-using-glue-crawlers)

## 匯出不含任何分割區的資料
<a name="export-unload-example-sample-1"></a>

您想要以 CSV 格式匯出資料的最後兩天。

```
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://<bucket_name>/withoutpartition' 
WITH (  format='CSV',   
compression='GZIP')
```

## 依頻道分割資料
<a name="export-unload-example-sample-2"></a>

您想要以 CSV 格式匯出最後兩天的資料，但想要將來自每個流量通道的資料放在個別的資料夾中。若要這樣做，您需要使用 `channel`欄分割資料，如下所示。

```
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://<bucket_name>/partitionbychannel/' 
WITH (  
partitioned_by = ARRAY ['channel'], 
format='CSV',   
compression='GZIP')
```

## 依事件分割資料
<a name="export-unload-example-sample-3"></a>

您想要以 CSV 格式匯出最後兩天的資料，但想要將每個事件的資料放在個別的資料夾中。若要這樣做，您需要使用 `event`資料欄分割資料，如下所示。

```
UNLOAD(SELECT user_id, ip_address, channel, session_id, measure_name, time, 
query, quantity, product_id, event 
FROM sample_clickstream.sample_shopping 
WHERE time BETWEEN ago(2d) AND now())  
TO 's3://<bucket_name>/partitionbyevent/' 
WITH (  
partitioned_by = ARRAY ['event'], 
format='CSV',   
compression='GZIP')
```

## 依頻道和事件分割資料
<a name="export-unload-example-sample-4"></a>

您想要以 CSV 格式匯出最後兩天的資料，但想要將每個頻道和頻道內的資料存放在個別資料夾中。若要這樣做，您需要使用 `channel`和 資料`event`欄來分割資料，如下所示。

```
UNLOAD(SELECT user_id, ip_address, session_id, measure_name, time, 
query, quantity, product_id, channel,event 
FROM sample_clickstream.sample_shopping 
WHERE time BETWEEN ago(2d) AND now())  
TO 's3://<bucket_name>/partitionbychannelevent/' 
WITH (  
partitioned_by = ARRAY ['channel','event'], 
format='CSV',   
compression='GZIP')
```

## 資訊清單和中繼資料檔案
<a name="export-unload-example-manifest-metadata"></a>

### 清單檔案
<a name="export-unload-common-questions-what-information-manifest"></a>

資訊清單檔案提供使用 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" 
  }
}
```

### 中繼資料
<a name="export-unload-common-questions-what-information-metadata"></a>

中繼資料檔案提供有關資料集的其他資訊，例如資料欄名稱、資料欄類型和結構描述。中繼資料檔案可在提供的 S3 儲存貯體中使用，檔案名稱為：S3：//bucket\$1name/<queryid>\$1<UUID>\$1metadata.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`傳送的結構相同。

## 使用 Glue 爬蟲程式建置 Glue Data Catalog
<a name="export-unload-example-using-glue-crawlers"></a>

1. 使用 Admin 登入資料登入您的帳戶，以進行下列驗證。

1. 使用[此處](https://docs.aws.amazon.com/glue/latest/ug/tutorial-add-crawler.html)提供的準則建立 Glue Database 的爬蟲程式。請注意，資料來源中提供的 S3 資料夾應該是`UNLOAD`結果資料夾，例如 `s3://my_timestream_unloads/results`。

1. 依照[此處](https://docs.aws.amazon.com/glue/latest/ug/tutorial-add-crawler.html#tutorial-add-crawler-step2)的指導方針執行爬蟲程式。

1. 檢視 Glue 資料表。
   + 前往 **AWS Glue** → **資料表**。
   + 您會看到在建立爬蟲程式時，使用提供的資料表字首建立新的資料表。
   + 您可以按一下資料表詳細資訊檢視來查看結構描述和分割區資訊。

以下是使用 AWS Glue Data Catalog 的其他 AWS 服務和開放原始碼專案。
+ **Amazon Athena** – 如需詳細資訊，請參閱《Amazon Athena 使用者指南》中的[了解資料表、資料庫和資料目錄](https://docs.aws.amazon.com/athena/latest/ug/understanding-tables-databases-and-the-data-catalog.html)。
+ **Amazon Redshift Spectrum** – 如需詳細資訊，請參閱《[Amazon Redshift 資料庫開發人員指南》中的使用 Amazon Redshift Spectrum 查詢外部資料](https://docs.aws.amazon.com/redshift/latest/dg/c-using-spectrum.html)。
+ **Amazon EMR** – 如需詳細資訊，請參閱《[Amazon EMR 管理指南》中的使用資源型政策來存取 AWS Glue Data Catalog](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-glue.html)。
+ **AWS 適用於 Apache Hive 中繼存放區的 Glue Data Catalog 用戶端** – 如需此 GitHub 專案的詳細資訊，請參閱[AWS 適用於 Apache Hive 中繼存放區的 Glue Data Catalog 用戶端](https://github.com/awslabs/aws-glue-data-catalog-client-for-apache-hive-metastore)。

# 從 Timestream for LiveAnalytics 的 UNLOAD 限制
<a name="export-unload-limits"></a>

以下是與 `UNLOAD`命令相關的限制。
+ 使用 `UNLOAD`陳述式的查詢並行為每秒 1 個查詢 (QPS)。超過查詢速率可能會導致限流。
+ 包含`UNLOAD`陳述式的查詢每個查詢最多可以匯出 100 個分割區。建議您先檢查所選資料欄的不同計數，再使用它來分割匯出的資料。
+ 包含`UNLOAD`陳述式逾時的查詢會在 60 分鐘後逾時。
+ `UNLOAD` 陳述式在 Amazon S3 中建立的檔案大小上限為 78 GB。

如需 Timestream for LiveAnalytics 的其他限制，請參閱 [配額預設配額](ts-limits.md)