使用須知 - Amazon Redshift

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

使用須知

您無法使用與標準 Amazon Redshift 資料表相同的資源檢視 Amazon Redshift 資料表的詳細資訊,例如PG_TABLE_DEFSTV_TBL_PERM、PG_Class 或信息架構。如果您的商業智慧或分析工具無法識別 Redshift Spectrum 外部資料表,請將您的應用程式設定為查詢 SVV_EXTERNAL_TABLESSVV_EXTERNAL_COLUMNS

CREATE EXTERNAL TABLE AS

在某些情況下,您可能會在AWS Glue資料目錄、AWS Lake Formation外部目錄,或 Apache Hive 元存放區。在這種情況下,您可以使用 AWS Identity and Access Management (IAM) 角色來建立外部結構描述。此 IAM 角色必須同時具有 Amazon S3 的讀取和寫入許可。

如果您使用 Lake Formation 目錄,則 IAM 角色必須具有在目錄中建立資料表的許可。在這種情況下,它也必須具有目標 Amazon S3 路徑上的資料湖位置許可。此 IAM 角色會成為新 AWS Lake Formation 資料表的擁有者。

為了確保檔案名稱是唯一的,Amazon Redshift 會默認使用下列格式作為上傳至 Amazon S3 的每個檔案名稱。

<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>.

例如,20200303_004509_810669_1007_0001_part_00.parquet

執行 CREATE EXTERNAL TABLE AS 命令時,請考慮以下幾點:

  • Amazon S3 位置必須為空。

  • 當使用儲存 AS 子句時,Amazon Redshift 僅支援 PARQUET 和 TEXTFILE 格式。

  • 您不需要定義欄位定義清單。新外部資料表的欄位名稱和欄位資料類型是直接從 SELECT 查詢衍生。

  • 您不需要在 PARTITIONED BY 子句中定義分割區欄位的資料類型。如果您指定分割區索引鍵,此欄位的名稱必須存在於 SELECT 查詢結果中。當擁有多個分割區欄位時,它們在 SELECT 查詢中的順序並不重要。Amazon Redshift 會使用它們在 PARTITONED BY 子句中定義的順序來建立外部資料表。

  • Amazon Redshift 會根據分割區索引鍵的值,自動將輸出檔案分到分割資料夾。Amazon Redshift 會從輸出檔案中移除分割區資料欄。

  • 不支援 LINES TERMINATED BY 'delimiter' 子句。

  • 不支援 ROW FORMAT SERDE 'serde_name' 子句。

  • 不支援使用資訊清單檔案。因此,您不能將 LOCATION 子句定義為 Amazon S3 上的清單檔案。

  • Amazon Redshift 會自動更新命令末尾的「numRows」資料表格屬性。

  • 'compression_type' 表格屬性只接受 'none' 或 'snappy' 的 PARQUET 檔案格式。

  • Amazon Redshift 不允許外部 SELECT 查詢中的 LIMIT 子句。相反的,您可以使用巢狀 LIMIT 子句。

  • 您可以使用 STL_UNLOAD_LOG 來追蹤由每個 CREATE EXTERNAL TABLE AS 操作寫入 Amazon S3 的檔案。

建立和查詢外部資料表的許可

若要建立外部資料表,請確定您是外部結構描述或超級使用者的擁有者。若要轉移外部結構描述的所有權,請使用 ALTER SCHEMA。下列範例會將 spectrum_schema 結構描述的擁有者變更為 newowner

alter schema spectrum_schema owner to newowner;

若要執行 Redshift Spectrum 查詢,您需要以下許可:

  • 結構描述使用許可

  • 在目前資料庫建立暫時資料表的許可

下列範例可在結構描述 spectrum_schema 上授予使用許可至 spectrumusers 使用者群組。

grant usage on schema spectrum_schema to group spectrumusers;

下列範例可在資料庫 spectrumdb 上授予臨時許可至 spectrumusers 使用者群組。

grant temp on database spectrumdb to group spectrumusers;

虛擬資料欄

Amazon Redshift 會以虛擬資料欄建立外部資料表$path$size。選擇這些欄位以檢視 Amazon S3 上資料檔案的路徑,以及由查詢傳回的每列資料檔案大小。$path$size 欄位名稱必須以雙引號分隔。SELECT * 子句不會傳回虛擬資料欄。您必須在查詢中明確包含 $path$size 欄位名稱,如以下範例所示。

select "$path", "$size" from spectrum.sales_part where saledate = '2008-12-01';

您可以藉由將 spectrum_enable_pseudo_columns 組態參數設定為 false,以停用工作階段的虛擬資料欄建立。

重要

SELECT$size或者$path會產生費用,因為 Redshift Spectrum 會掃描 Amazon S3 中的資料檔案以判斷結果集的大小。如需詳細資訊,請參閱「」Amazon Redshift 定價

設置數據處理選項

您可以設置表參數來指定對外部表中查詢的數據的輸入處理,包括:

  • 包含 VARCHAR、CHAR 和字符串數據的列中的剩餘字符。如需詳細資訊,請參surplus_char_handling

  • 包含 VARCHAR、CHAR 和字符串數據的列中的字符無效。如需詳細資訊,請參invalid_char_handling

  • 為外部表屬性指定 REPLACE 時要使用的替換字符invalid_char_handling

  • 在包含整數和十進制數據的列中轉換溢出處理。如需詳細資訊,請參numeric_overflow_handling