使用須知 - Amazon Redshift

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

使用須知

本主題包含 CREATE EXTERNAL TABLE 的使用須知。您無法使用與標準 Amazon Redshift 資料表相同的資源來檢視 Amazon Redshift Spectrum 資料表的詳細資訊,例如 PG_TABLE_DEF、CLASS、PG_ STV_TBL_PERM或 information_schema。如果您的商業智慧或分析工具無法識別 Redshift Spectrum 外部資料表,請將您的應用程式設定為查詢 SVV_EXTERNAL_TABLESSVV_EXTERNAL_COLUMNS

CREATE EXTERNAL TABLE AS

在某些情況下,您可以在 AWS Glue Data Catalog、 AWS Lake Formation external Catalog 或 Apache Hive 中繼存放區上執行 CREATE EXTERNAL TABLE AS 命令。在這種情況下,您可以使用 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 位置必須為空。

  • Amazon Redshift 僅在使用 STORED AS 子句時支援 PARQUET和 TEXTFILE 格式。

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

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

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

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

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

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

  • Amazon Redshift 會在命令結束時自動更新 'numRows' 資料表屬性。

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

  • 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,以停用工作階段的虛擬資料欄建立。

重要

選擇 $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

  • 在包含 VARBYTE 資料的資料欄中,Surplus_bytes_handling 可指定多餘位元組的輸入處理。如需詳細資訊,請參閱外部資料表屬性 surplus_bytes_handling