

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

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

# SQL 支援
<a name="supported-sql-constructs"></a>

Timestream for LiveAnalytics 支援一些常見的 SQL 建構。您可以在下面閱讀更多資訊。

**Topics**
+ [

# SELECT
](supported-sql-constructs.SELECT.md)
+ [

# 子查詢支援
](supported-sql-constructs.subquery-support.md)
+ [

# SHOW 陳述式
](supported-sql-constructs.SHOW.md)
+ [

# DESCRIBE 陳述式
](supported-sql-constructs.DESCRIBE.md)
+ [

# UNLOAD
](supported-sql-constructs.UNLOAD.md)

# SELECT
<a name="supported-sql-constructs.SELECT"></a>

**SELECT** 陳述式可用來從一或多個資料表擷取資料。Timestream 的查詢語言支援 SELECT ****陳述式的下列語法：

```
[ WITH with_query [, ...] ]
            SELECT [ ALL | DISTINCT ] select_expr [, ...]
            [ function (expression) OVER (
            [ PARTITION BY partition_expr_list ]
            [ ORDER BY order_list ]
            [ frame_clause ] )
            [ FROM from_item [, ...] ]
            [ WHERE condition ]
            [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
            [ HAVING condition]
            [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
            [ ORDER BY order_list ]
            [ LIMIT [ count | ALL ] ]
```

where 
+ `function (expression)` 是支援的[視窗函數](window-functions.md)之一。
+ `partition_expr_list` 是：

  ```
  expression | column_name [, expr_list ]
  ```
+ `order_list` 是：

  ```
  expression | column_name [ ASC | DESC ] 
  [ NULLS FIRST | NULLS LAST ]
  [, order_list ]
  ```
+ `frame_clause` 是：

  ```
  ROWS | RANGE
  { UNBOUNDED PRECEDING | expression PRECEDING | CURRENT ROW } |
  {BETWEEN
  { UNBOUNDED PRECEDING | expression { PRECEDING | FOLLOWING } |
  CURRENT ROW}
  AND
  { UNBOUNDED FOLLOWING | expression { PRECEDING | FOLLOWING } |
  CURRENT ROW }}
  ```
+ `from_item` 是下列其中一項：

  ```
  table_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
  from_item join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
  ```
+ `join_type` 是下列其中一項：

  ```
  [ INNER ] JOIN
  LEFT [ OUTER ] JOIN
  RIGHT [ OUTER ] JOIN
  FULL [ OUTER ] JOIN
  ```
+ `grouping_element` 是下列其中一項：

  ```
  ()
  expression
  ```

# 子查詢支援
<a name="supported-sql-constructs.subquery-support"></a>

 Timestream 支援 `EXISTS`和`IN`述詞中的子查詢。`EXISTS` 述詞會判斷子查詢是否傳回任何資料列。`IN` 述詞會判斷子查詢產生的值是否符合 IN 子句中的 值或表達式。Timestream 查詢語言支援相互關聯和其他子查詢。

```
SELECT t.c1
FROM (VALUES 1, 2, 3, 4, 5) AS t(c1)
WHERE EXISTS
(SELECT t.c2
 FROM (VALUES 1, 2, 3) AS t(c2)
 WHERE t.c1= t.c2
)
ORDER BY t.c1
```


| c1 | 
| --- | 
|  1  | 
|  2  | 
|  3  | 

```
SELECT t.c1
FROM (VALUES 1, 2, 3, 4, 5) AS t(c1)
WHERE t.c1 IN
(SELECT t.c2
 FROM (VALUES 2, 3, 4) AS t(c2)
)
ORDER BY t.c1
```


| c1 | 
| --- | 
|  2  | 
|  3  | 
|  4  | 

# SHOW 陳述式
<a name="supported-sql-constructs.SHOW"></a>

您可以使用 `SHOW DATABASES`陳述式來檢視帳戶中的所有資料庫。語法如下：

```
SHOW DATABASES [LIKE pattern]
```

其中 `LIKE`子句可用於篩選資料庫名稱。

您可以使用 `SHOW TABLES`陳述式來檢視帳戶中的所有資料表。語法如下：

```
SHOW TABLES [FROM database] [LIKE pattern]
```

其中 `FROM`子句可用於篩選資料庫名稱，而 `LIKE`子句可用於篩選資料表名稱。

您可以使用 `SHOW MEASURES`陳述式來檢視資料表的所有量值。語法如下：

```
SHOW MEASURES FROM database.table [LIKE pattern]
```

其中 `FROM`子句將用於指定資料庫和資料表名稱，而 `LIKE`子句可用於篩選度量名稱。

# DESCRIBE 陳述式
<a name="supported-sql-constructs.DESCRIBE"></a>

您可以使用 `DESCRIBE`陳述式來檢視資料表的中繼資料。語法如下：

```
DESCRIBE database.table
```

其中 `table`包含資料表名稱。描述陳述式會傳回資料表的資料欄名稱和資料類型。

# UNLOAD
<a name="supported-sql-constructs.UNLOAD"></a>

Timestream for LiveAnalytics 支援 `UNLOAD`命令做為其 SQL 支援的延伸。中`UNLOAD`說明 支援的資料類型[支援的資料類型](supported-data-types.md)。`time` 和 `unknown`類型不適用於 `UNLOAD`。

```
UNLOAD (SELECT statement)
 TO 's3://bucket-name/folder'
 WITH ( option = expression [, ...] )
```

其中 選項為

```
{ 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 上資料夾位置的 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/supported-sql-constructs.UNLOAD.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。  
實際檔案大小會在寫入檔案時近似，因此實際大小上限可能不完全等於您指定的數字。