CREATE EXTERNAL TABLE statement
雖然表格通常位於資料庫中,但外部表格位於文字型定界檔案,或在資料庫外部的固定長度格式檔案中。
- 將資料儲存在資料庫外部,同時保留查詢該資料的能力。 若要將資料從資料庫卸載至外部檔案,請在下列其中一個 SQL 陳述式中指定外部表格作為目標表格:
- INSERT SQL
- SELECT INTO SQL
- CREATE EXTERNAL TABLE AS SELECT SQL
- 將資料從外部檔案載入至資料庫中的表格。 您可以執行強制轉型、結合及捨棄直欄等作業,以在載入期間操作資料。 若要將資料從外部表格載入至資料庫,請在 SELECT SQL 陳述式中使用 FROM 子句,就像您對任何其他表格所執行的動作一樣。
- 將資料傳送至另一個應用程式。
使用外部表格進行「擷取 - 轉換 - 載入 (ETL)」處理程序的優點是可以使用一般 SQL 來執行它們。 因為 SQL 型 ETL 處理程序可以從任何 SQL 用戶端起始,所以不需要特殊 ETL 工具。
- 具名
- 外部表格具有與一般表格類似的名稱及型錄項目。
- 暫時性
- 外部表格具有
SYSTET<number>格式的系統產生名稱,且沒有型錄項目。 例如,系統可能會建立暫時性外部表格來保留查詢的結果。 這類表格的生命期限是查詢的持續時間。
呼叫
此陳述式可以內嵌在應用程式中,或使用動態 SQL 陳述式發出。 它是可執行的陳述式,只有在 DYNAMICRULES 執行行為對套件有效時才能動態準備 (SQLSTATE 42509)。
授權
- CREATETAB 權限
- 下列其中一個專用權或權限:
- 表格空間上的 USE 專用權
- SYSADM 權限
- SYSCTRL 權限
- 下列其中一個專用權或權限:
- 資料庫上的 IMPLICIT_SCHEMA 權限(如果表格的隱含或明確綱目名稱不存在)
- 綱目的 CREATEIN 專用權(如果表格的綱目名稱指的是現有綱目)
- 綱目的 SCHEMAADM 權限(如果表格的綱目名稱指的是現有綱目)
- 授權 ID 必須與表格階層的根表格擁有者相同。
- 授權 ID 所保留的專用權必須在包含表格階層的根表格的綱目上包括 SCHEMAADM 權限。
- 授權 ID 所保留的專用權必須包括 DBADM 權限。
語法
此陳述式的語法視要建立的外部表格本質而定:- 使用下列語法,在型錄中建立新外部表格的表格定義。 指定表格名稱是必要的,因此產生的外部表格是具名表格。 必須指定 DATAOBJECT 或 FILE_NAME 選項,才能識別目標檔。
- 透過下列語法來使用現有表格作為新外部表格的範本,並將來源表格的內容移入其中。 如果此陳述式明確指定表格名稱,則產生的外部表格是具名表格;否則,產生的外部表格是暫時性表格。 檔名必須由
file-name參數或 DATAOBJECT 或 FILE_NAME 選項指定。
說明
- table-name
- 外部表格的名稱。 名稱(包括隱含或明確限定元)不得識別已在型錄中說明的表格、視圖、暱稱或別名。 綱目名稱不能是 SYSIBM、SYSCAT、SYSFUN 或 SYSSTAT (SQLSTATE 42939)。 file-name
- 將包含要建立的外部表格之檔案(或可視為檔案的任何媒體)的完整名稱。 如果指定此參數,則無法指定 DATAOBJECT 或 FILE_NAME 選項。 column-definition
- 定義直欄的屬性。
- column-name
- 命名表格的直欄。 名稱不能完整,且相同的名稱不能用於表格的多個直欄 (SQLSTATE 42711)。 built-in-type
- 下列其中一個內建資料類型:
- SMALLINT
- 小整數。
- [INTEGER | INT]
- 大整數。
- BIGINT
- 大整數。
- [DECIMAL | DEC | NUMERIC | NUM] (precision-integer, scale-integer)
- 十進位數。
- 精準度整數指定總位數。 它必須在 1 - 31 範圍內。 預設值為 5。
- 小數位數整數指定小數點右邊的位數。 它不能是負數,也不能超出精準度。 預設值是 5。
- FLOAT(integer)
- 單一或倍精準度浮點數字。 如果指定的長度在範圍內:
- 1 - 24,數字使用單一精準度
- 25 - 53,數字使用倍精準度
您可以指定下列項目,而非 FLOAT:- REAL
- 適用於單精準度浮點。
- DOUBLE
- 適用於倍精準度浮點。
- DOUBLE PRECISION
- 適用於倍精準度浮點。
- FLOAT
- 適用於倍精準度浮點。
- DECFLOAT(precision-integer)
- 小數浮點數字。 精準度整數指定總位數,可以是 16 或 34。 預設值為 34。
- [CHARACTER | CHAR](integer [OCTETS | CODEUNITS32])
- 指定字碼單位數目的固定長度字串。 此數字的範圍可以是 1 - 255 OCTETS 或 1 - 63 CODEUNITS32。 預設值為 1。
- [VARCHAR | CHARACTER VARYING | CHAR VARYING](integer [OCTETS | CODEUNITS32])
- 可變長度字串,其最大長度為指定的字碼單位數目。 此數字的範圍可以是 1 - 32672 OCTETS 或 1 - 8168 CODEUNITS32。
- 關於位元資料
- 指定將直欄內容視為位元(二進位)資料。 在與其他系統交換資料期間,不會執行字碼頁轉換。 無論資料庫對照順序為何,都會以二進位來執行比較。
- [CLOB | 字元大型物件 | 字元大型物件] (integer [K] [OCTETS | CODEUNITS32])
- 字元大型物件字串,其長度上限為指定的編碼單位數目。 預設長度上限為 65,535 個位元組。如果您要將長度整數乘以 1024 ,請指定 K (kilo) 乘數。
- 無論您是否使用 K 乘數,產生的長度都受限於外部表格中 CLOB 直欄的長度上限,即 65,535 OCTETS、32,767 CODEUNITS16或 16,383 CODEUNITS32。 請注意,64K OCTETS 和 16K CODEUNITS32 每一個都超出長度上限 1,因此不容許使用。
- 在資料類型與長度規格之間或在長度整數與 K 乘數之間容許任何空格數 (包括零空格)。 例如,下列規格都相等且有效:
CLOB(50K) CLOB(50 K) CLOB (50 K) - K 乘數可以大寫或小寫指定。
在 Unicode 資料庫中,字串資料類型的預設字串單位是由 NLS_STRING_UNITS 廣域變數或 string_units 資料庫配置參數的值決定。 在非 Unicode 資料庫中,字串資料類型的預設字串單位是 OCTETS。
- OCTETS
- 指定長度屬性的單位是位元組。
- CODEUNITS32
- 指定長度屬性的單位是 Unicode UTF-32 代碼單位,以字元數為單位計算近似值。 這不會影響資料類型的基礎字碼頁。 資料值的實際長度是透過計算 UTF-32 字碼單位來決定,就像資料已轉換為 UTF-32 一樣。 CODEUNITS32 只能在 Unicode 資料庫中指定 (SQLSTATE 560AA)。
- GRAPHIC(integer [CODEUNITS16 | CODEUNITS32])
- 指定長度的固定長度圖形字串,範圍為 1 - 127 個雙位元組、1 - 127 CODEUNITS16 或 1 - 63 CODEUNITS32。 預設長度為 1。
- VARGRAPHIC(integer [CODEUNITS16 | CODEUNITS32])
- 指定長度上限的可變長度圖形字串,範圍為 1 - 16336 個雙位元組、1 - 16336 CODEUNITS16 或 1 - 8168 CODEUNITS32。
- DBCLOB (integer [K] [CODEUNITS16 | CODEUNITS32])
- 指定長度上限的字元大型物件字串,以雙位元組、Unicode UTF-16 字碼單位或 Unicode UTF-32 字碼單位為單位。 預設長度上限為 32,767 個雙位元組。如果您要將長度整數乘以 1024 ,請指定 K (kilo) 乘數。
- 無論您是否使用 K 乘數,產生的長度都受到外部表格中 DBCLOB 直欄的最大長度限制,即 32,767 CODEUNITS16 或 16,383 CODEUNITS32。 請注意,32K CODEUNITS16 和 16K CODEUNITS32 每一個都超出長度上限 1,因此不容許使用。
- 在資料類型與長度規格之間或在長度整數與 K 乘數之間容許任何空格數 (包括零空格)。 例如,下列規格都相等且有效:
DBCLOB(50K) DBCLOB(50 K) DBCLOB (50 K) - K 乘數可以大寫或小寫指定。
在 Unicode 資料庫中,字串資料類型的預設字串單位是由 NLS_STRING_UNITS 廣域變數或 string_units 資料庫配置參數的值決定。 在非 Unicode 資料庫中,字串資料類型的預設字串單位為 CODEUNITS16。
- CODEUNITS16
- 指定長度屬性的單位是 Unicode UTF-16 代碼單位,與以雙位元組為單位的計數相同。 CODEUNITS16 只能在 Unicode 資料庫中指定 (SQLSTATE 560AA)。
- CODEUNITS32
- 指定長度屬性的單位是 Unicode UTF-32 字碼單位。 這不會影響資料類型的基礎字碼頁。 資料值的實際長度是透過計算 UTF-32 字碼單位來決定,就像資料已轉換為 UTF-32 一樣。 CODEUNITS32 只能在 Unicode 資料庫中指定 (SQLSTATE 560AA)。
- [NATIONAL CHARACTER | NATIONAL CHAR | NCHAR](integer)
- 指定長度的固定長度字串。 預設長度為 1。
NATIONAL CHARACTER 類型對映至固定長度字元或固定長度圖形字串,取決於也定義字串單位的 nchar_mapping 資料庫配置參數值。
- [NATIONAL CHARACTER VARYING | NATIONAL CHAR VARYING | NCHAR VARYING | NVARCHAR](integer)
- 指定最大長度的可變長度字串。
NATIONAL CHARACTER VARYING 類型會對映至可變長度字元或可變長度圖形字串,取決於也定義字串單位的 nchar_mapping 資料庫配置參數值。
- [NATIONAL CHARACTER LARGE OBJECT | NCHAR LARGE OBJECT | NCLOB] (整數 [K])
- 指定長度上限的大型物件字串。 預設長度上限為 16,383 個雙位元組。
此資料類型對映至字元大型物件 (CLOB) 或雙位元組字元大型物件 (DBCLOB),取決於也定義字串單位的 nchar_mapping 資料庫配置參數的現行值。 如需長度整數的可能值以及如何使用 K (kilo) 乘數的相關資訊,請參閱 CLOB 或 DBCLOB 參數的說明 (看何者適用)。
- BINARY(整數)
- 指定長度的固定長度二進位字串,必須在 1 - 255 個位元組範圍內。 預設長度為 1。
- [VARBINARY | BINARY VARYING](integer)
- 指定長度上限的可變長度二進位字串,必須在 1 - 32672 位元組範圍內。
- [BLOB | 二進位大型物件] (integer [K])
- 二進位大型物件字串,其最大長度為指定的字碼單位數目。 預設長度上限為 65,535 個位元組。如果您要將長度整數乘以 1024 ,請指定 K (kilo) 乘數。
- 不論您是否使用 K 乘數,結果長度都會受到外部表格中 BLOB 直欄的長度上限 (即 65,535 個位元組) 限制。 請注意,64K 超出長度上限 1,因此不容許使用。
- 在資料類型與長度規格之間或在長度整數與 K 乘數之間容許任何空格數 (包括零空格)。 例如,下列規格都相等且有效:
BLOB(50K) BLOB(50 K) BLOB (50 K) - K 乘數可以大寫或小寫指定。
- 日期
- 一個日期。
- TIME
- 一次。
- TIMESTAMP(integer) 或 TIMESTAMP
- 時間戳記。 此整數指定小數位數的秒數,從 0(秒)到 12(皮秒)。 預設值為 6(微秒)。
- BOOLEAN
- 一個布林值。
- LIKE table-name1 或 view-name 或 nickname
- 指定表格的直欄與指定表格 (table-name1)、視圖 (view-name) 或暱稱 (nickname) 的直欄具有相同的名稱及說明。 指定的表格、視圖或暱稱必須存在於型錄中,或者必須是宣告的暫存表格。 無法指定類型化表格或類型化視圖 (SQLSTATE 428EC)。LIKE 的使用是 n 直欄的隱含定義,其中 n 是所識別表格(包括隱含地隱藏的直欄)、視圖或暱稱中的直欄數目。 新表格中對應於現有表格中隱含地隱藏直欄的直欄也會定義為隱含地隱藏。 隱含定義取決於 LIKE 之後指定的內容:
- 如果指定表格,則隱含定義包括該表格的每一個直欄的直欄名稱、資料類型、隱藏屬性及可空值性性質。 如果未指定 EXCLUDING COLUMN DEFAULTS,則也會包含直欄預設值。
- 如果指定視圖,則隱含定義包括該視圖中所定義全選的每一個結果直欄的直欄名稱、資料類型及可空值性性質。 視圖直欄的資料類型必須是適用於表格直欄的資料類型。
- 如果指定暱稱,則隱含定義包括該暱稱的每一個直欄的直欄名稱、資料類型及可空值性性質。
- 如果指定受保護表格,則新表格會繼承與識別表格相同的安全原則及受保護直欄。
- 如果指定表格,且該表格包含 row-begin 直欄、row-end 直欄或 transaction-start-ID 直欄,則新表格的對應直欄只會繼承來源直欄的資料類型。 新直欄不會被視為已產生的直欄。
- 如果指定包含句點的表格,則新表格不會繼承句點定義。
- 如果指定系統期間時間表格,則新表格不是系統期間時間表格。
- 如果指定使用依世代隨機方法的隨機配送表,且正在建立的新表格未共用相同的表格配送,則不會包括用來產生隨機配送值的 RANDOM_DISTRIBUTION_KEY 直欄。
根據 copy-attributes 子句,可以包括或排除直欄預設屬性。 隱含定義不包含指定表格、視圖或暱稱的任何其他屬性。 因此,新表格沒有任何主要索引鍵、唯一限制項、外部索引鍵限制項、參照完整性限制、觸發程式、索引、ORGANIZE BY 規格或 PARTITIONING KEY 規格。
在 LIKE 子句中識別表格且該表格包含 ROW CHANGE TIMESTAMP 直欄時,新表格的對應直欄只會繼承 ROW CHANGE TIMESTAMP 直欄的資料類型。 新直欄不會被視為已產生的直欄。
如果指定表格,且已啟動該表格的列或直欄層次存取控制,則新表格不會繼承該表格。
- 選項
- 下列選項控制將資料載入外部表格檔案或從外部表格檔案擷取資料。 每一個選項的值都是字串,不區分大小寫。
- BINARYNUMERICICS
- 指定以二進位格式而非 ASCII 字元表示法輸入數值資料。 不影響其他非數值資料。 僅支援文字格式的固定長度格式資料。
- TRUE 或 ON
數值資料 (DECIMAL 類型除外) 必須以二進位格式輸入。
支援的數值類型為 SMALLINT、INT、BIGINT、REAL 和 DOUBLE。 不會在資料類型之間進行轉換,但在整數類型 (SMALLINT、INT 及 BIGINT) 之間進行的轉換除外。
資料長度必須符合其目標直欄定義 (整數轉換除外; 例如 2、4 及 8 位元組都是 BIGINT 直欄的有效區域長度)。
不論載入作業執行所在的平台為何,都會假設資料檔中的所有數值輸入都是大序排列法。
REAL 和 DOUBLE 值必須是 IEEE 浮點數格式。
- FALSE 或 OFF
- 數字資料必須以標準 ASCII 字元表示法輸入。
- BOOLSTYLE 或 BOOLEAN_STYLE
- 在載入作業期間,所有布林值必須使用相同的樣式。 此選項指定要使用的布林樣式:
- 1_0(這是預設值)
- T_F
- Y_N
- YES_NO
- TRUE_FALSE
- 基數
- 非零正整數值可置換預期傳回列數的估計。
- CCSID
- 輸入資料檔的編碼字集 ID (CCSID)。 此值可以是 CCSID 規格中的任何有效整數值。 沒有預設值。 當 ENCODING 選項的值為 UTF8、 LATIN9或 INTERNAL 時, CCSID 與 ENCODING 選項互斥。日期和時間使用的樣式取決於是否指定 CCSID:
- 如果指定 CCSID,且未指定 DATESTYLE、TIMESTYLE、DATEDELIM 或 TIMEDELIM,則會使用 DATE_FORMAT、TIME_FORMAT 及 TIMESTAMP_FORMAT 的值或預設值。
- 如果未指定 CCSID,且未指定 TIMESTAMP_FORMAT、DATE_FORMAT 或 TIME_FORMAT,則會使用 DATESTYLE、TIMESTYLE、DATEDELIM 及 TIMEDELIM 的值或預設值。
- COMPRESS
- 對於載入作業或卸載作業,是否壓縮資料檔案資料:
- GZIP
- 使用 GZIP 壓縮演算法來壓縮資料檔案資料。
- NO
- 不會壓縮資料檔資料。 這是預設值。
- LZ4
- 資料檔案資料是使用 LZ4 壓縮演算法進行壓縮。
- CRINSTRING
- 如何解譯未跳出的回車 (CR) 或回車換行 (CRLF) 字元:
- TRUE 或 ON
- 未跳出的 CR 字元會解譯為資料,而不是記錄定界字元。
- FALSE 或 OFF
- 未跳出的 CR 會解譯為記錄定界字元。 這是預設值。
- CTRLCHARS
- CHAR 或 VARCHAR 欄位中是否容許 ASCII 值 1 - 31。 任何空值、CR 或 LF 字元都必須跳出。 接受的值為:
- TRUE 或 ON
- CHAR 或 VARCHAR 欄位中容許 ASCII 值 1 - 31。
- FALSE 或 OFF
- CHAR 或 VARCHAR 欄位中不容許 ASCII 值 1 - 31。 這是預設值。
- DATAOBJECT 或 FILE_NAME
- 將包含要建立的外部表格之檔案(或可視為檔案的任何媒體)的完整名稱。 當未緊接在表格名稱之後指定檔案名稱時,此選項是必要的; 否則,不容許此選項。
當 REMOTESOURCE 選項設為 LOCAL(這是其預設值)且 extbl_strict_io 配置參數設為 NO 時,外部表格檔案的路徑是絕對路徑,必須是 extbl_location 配置參數指定的其中一個路徑。 否則,外部表格檔案的路徑相對於 extbl_location 配置參數所指定的路徑,後面接著表格定義者的授權 ID。 例如,如果 extbl_location 設為
/home/xyz,且表格定義者的授權 ID 為user1,則外部表格檔案的路徑相對於/home/xyz/user1/。檔名必須是有效的 UTF-8 字串。
對於載入作業,下列條件適用:- 該檔案必須已存在。
- 需要的許可權:
- 如果外部表格是具名外部表格,則擁有者必須具有檔案的讀取權及 LOGDIR 目錄的寫入權。
- 如果外部表格是暫時性外部表格,則陳述式授權 ID 必須具有檔案的讀取權及 LOGDIR 目錄的寫入權。
- 如果檔案存在,則會改寫該檔案。
- 需要的許可權:
- 如果外部表格是具名外部表格,則擁有者必須對此檔案的目錄具有讀取及寫入權。
- 如果外部表格是暫時性表格,則陳述式授權 ID 必須對此檔案的目錄具有讀寫權。
- DATEDELIM
- 根據 DATESTYLE 選項指定的格式,區隔日期元件的定界字元。 如果您指定空字串,則日期元件之間沒有定界字元,且日和月必須指定為兩位數數字。 當 DATESTYLE 設為 MONDY 或 MONDY2 時,預設 DATEDELIM 值是空格。 TIMESTAMP_FORMAT 與 DATEDELIM 選項互斥。
- DATESTYLE
- 如何解譯日期格式。 對於範圍 1 - 9 中的日或月,請使用 1 位數、2 位數或使用空格,後面接著單一位數。 當 DATEDELIM 選項是空格時,您可以在日之後指定逗點。 如果您執行下列動作,則會發生錯誤:
- 若為日、月或年,請指定零
- 指定不存在的日期(例如,8 月 32 日或 2 月 30 日)
表 1. DateStyle 選項的可能值。 此範例顯示 DATEDELIM 設為 '-' 時如何表示 2014 年 3 月 21 日。 值 說明 範例 YMD 4 位數字的年份,2 位數字的月份,2 位數字的日期。 這是預設值。 2014-03-21 DMY 2 位數字的日期,2 位數字的月份,4 位數字的年份。 21-03-2014 MDY 2 位數字的月份,2 位數字的日期,4 位數字的年份。 03-21-2014 MONDY 3 個字元的月份,2 位數字的日期,4 位數字的年份。 Mar 21 2014 DMONY 2 位數字的日期,3 個字元的月份,4 位數字的年份。 21-Mar-2014 Y2MD 2 位數字的年份,2 位數字的月份,2 位數字的日期。 不支援卸載。 14-03-21 DMY2 2 位數字的日期,2 位數字的月份,2 位數字的年份。 不支援卸載。 21-03-14 MDY2 2 位數字的月份,2 位數字的日期,2 位數字的年份。 不支援卸載。 03-21-14 MONDY2 3 個字元的月份,2 位數字的日期,2 位數字的年份。 不支援卸載。 Mar 21 14 DMONY2 2 位數字的日期,3 個字元的月份,2 位數字的年份。 不支援卸載。 21-Mar-14 - DATETIMEDELIM
- 單位元組字元,用來區隔時間戳記資料類型的日期元件及時間元件。
- DATE_FORMAT
- 資料檔中的日期欄位格式。 此值可以是 TIMESTAMP_FORMAT 純量函數接受的任何日期格式字串。 預設值為 YYYY-MM-DD。 DATE_FORMAT 選項與 DATEDELIM 或 DATESTYLE 選項互斥。
- DECIMALDELIM 或 DECIMAL_CHARACTER
- 資料類型 FLOAT、DOUBLE、TIME 及 TIMESTAMP 的十進位定界字元。 容許的值為
','和'.'。 - DECPLUSBLANK
- 指定在卸載作業期間表示正十進位值的方式。
- DELIMITER 或 COLUMN_DELIMITER
- 用來定界輸入或輸出記錄的欄位的字元。 預設值為垂直線 (
'|')。您可以使用下列任何方式來指定 7 位元 ASCII 範圍(十進位 1 - 127)中的字元:- 作為單一字元(例如
DELIMITER ';') - 透過指定其對應的 ASCII 十進位值(例如,
DELIMITER 59或DELIMITER '59') - 透過指定其對應的 ASCII 十六進位值(例如,
DELIMITER x'3B')
只有透過指定其對應的 ASCII 十進位值或十六進位值,ISO 字集輸入檔才支援十進位範圍 128 - 255。 如果輸入檔是在 UTF8 字集中,則不支援此定界字元值範圍。
- 作為單一字元(例如
- ENCODING
- 檔案中的資料類型:
- UTF8
- 檔案使用 UTF8 encoding 針對所有字元資料。
- LATIN9
- 檔案使用 LATIN9 encoding 針對所有字元資料。
- INTERNAL
- 檔案同時使用 UTF8 和 LATIN9 編碼,或者您不確定使用哪種編碼類型。 系統會檢查資料並根據需要對資料進行編碼。 由於這項資料檢查可能降低整體效能,因此僅在必要時使用此值。 這是預設值。
- INTERNAL
- 這是預設選項。
- DBCS_GRAPHIC
- 此值僅適用於載入作業,不適用於卸載作業。 如果指定此值,則也必須指定 CCSID 選項。 在載入作業期間,類型 GRAPHIC 或 VARGRAPHIC 的欄位會使用指定 CCSID 的雙位元組字集進行編碼;所有其他類型的欄位則會使用指定 CCSID 的混合位元組字集進行編碼。附註: 對於 EXPORT 公用程式所建立的 DEL 檔案, ENCODING 無法設為 DBCS_GRAPHIC ,因為這類 DEL 檔案是使用單一字集編碼。
- ESCAPECHAR 或 ESCAPE_CHARACTER
- 將哪個字元視為跳出字元。 跳出字元指出後面的字元會被視為欄位值的一部分(否則會被視為欄位定界字元或列尾順序字元)。 圖形字串資料會忽略跳出字元。 沒有預設值。
- FILLRECORD
- 對於載入作業,記錄的欄位會從左至右載入至目標表格的直欄。 此選項指定輸入記錄包含的欄位是否可以少於為目標表格定義的直欄:
- TRUE 或 ON
- 如果遺漏值的所有直欄都可為空值,則輸入行可以包含較少的欄位。 遺漏值設為空值。 如果遺漏值的一或多個直欄不可為空值,則會拒絕記錄。
- FALSE 或 OFF
- 會拒絕包含較少直欄的輸入行。 這是預設值。
- FORMAT 或 FILE_FORMAT
- 原始檔的資料格式:
- 文字
- 要載入或卸載的資料採用文字定界格式。 這是預設值。
- INTERNAL
- 資料採用 Netezza Platform Software (NPS) 使用的內部格式。 只有在將資料從檔案載入至資料庫時,此值才有效,而不是在將資料卸載至檔案時有效。 如果對 FORMAT 選項指定此值,則也必須指定下列選項,且只指定這些選項:
- DATAOBJECT 或 FILE_NAME。
- REMOTESOURCE、SWIFT 或 S3。 如果指定 REMOTESOURCE 選項,它必須具有值 LOCAL 或 YES。
- COMPRESS。 這必須設為 GZIP。
- 二進位
- 資料採用 Db2 所使用的內部格式。
- FIXED
- 資料採用固定長度格式。
- IGNOREZERO 或 TRIM_NULLS
- 指定是否要捨棄 CHAR 欄位及 VARCHAR 欄位中的二進位值零。
- TRUE 或 ON
- 會忽略位元組值零。
- FALSE 或 OFF
- 不忽略位元組值零。 這是預設值。
- KEEP
- 接受二進位值零並容許作為輸入欄位的一部分。
- INCLUDEHEADER 或 COLUMN_NAMES
- 對於卸載作業,表格直欄名稱是否要併入為外部表格檔案中的標頭:
- TRUE 或 ON
- 表格直欄名稱將併入作為標頭。
- FALSE 或 OFF
- 表格直欄名稱不會併入作為標頭。 這是預設值。
- INCLUDEZEROSECONDS
- 對於卸載作業,當沒有秒的值可用時,是否指定 00 作為秒的值:
- TRUE 或 ON
- 指定 00 作為秒的值。
- FALSE 或 OFF
- 請勿指定秒的值。 這是預設值。
- 對於載入作業,指定資料檔案中是否存在隱藏的直欄值。
- LFINSTRING
- 指定如何解譯字串資料內未跳出的換行(有時稱為 LF 或換行)字元:
- TRUE 或 ON
- 只有在記錄的最後一個欄位中,才會將未跳出的 LF 字元解譯為記錄定界字元;否則會將它視為資料。 若要將記錄最後一個欄位中的 LF 字元視為資料,請以單引號或雙引號括住該欄位的值。
- FALSE 或 OFF
- 不論未跳出的 LF 字元的位置為何,都會將其解譯為記錄定界字元。 這是預設值。
卸載作業不支援此選項。
注意: 此 SQL 相容性加強功能僅在 Db2 11.5 Mod Pack 2 以及更新版本中提供。 - LOGDIR 或 ERROR_LOG
- 寫入下列檔案的目錄:
- <database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.bad
- 包含拒絕記錄的檔案(亦即,無法處理的記錄)。
- <database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.log
- 日誌檔。
<file-name>指出)的檔案名稱,以便不會超出上限。如果在分割區上執行作業時產生 .log 或 .bad 檔,則產生的檔案名稱會以句點作為字尾,後面接著 3 位數的分割區號碼。
- MAXERRORS 或 MAX_ERRORS
- 對於載入作業,這是系統停止處理並立即回復載入的拒絕記錄數臨界值。 預設值為 1(亦即,單一拒絕記錄會導致回復)。
- MULTIPARTSIZEMB
當 DB2_ENABLE_COS_SDK 登錄變數設為 ON 時,會透過內嵌的供應商 COS SDK 來協助 Db2 遠端儲存體與雲端物件儲存體的通訊,該 SDK 容許 Db2 將物件/檔案串流至多個組件中的雲端物件儲存體(又稱為「多組件上傳」)。 此參數指定要卸載之檔案的多組件上傳的組件大小 (MB),並置換 MULTIPARTSIZEMB dbm config 參數中指定的值。 從 11.5 版 Mod Pack 7 開始,僅在 Linux (x86) 環境中提供此選項。
- MAXROWS 或 MAX_ROWS
- 如果設為正整數,則會指定外部表格中要處理的記錄(列)數目上限。 如果設為 0(預設值),則沒有限制,且會處理所有列。 在載入作業期間,如果 MAXROWS 設為正值,則在處理該列數之後,不論是否拒絕或跳過部分列,系統都會結束載入作業並確定所有插入的記錄。
- MERIDIANDELIM
- 以 12 小時定界及未定界的時間值格式來區隔秒元件與 AM 記號或 PM 記號的單位元組字元。
- NOLOG
- 指定是否建立外部表格的 .log 檔案。
- NULLVALUE 或 NULL_VALUE
- 最多 4 個位元組的 UTF-8 字串,用來表示空值。 預設值為
'NULL'。 - PARTITION
- 如果針對資料庫啟用「資料庫分割特性 (DPF)」,則可以將外部表格分割成數個檔案。 組成外部表格的每一個資料檔的名稱都以句點作為字尾,後面接著從 000 到 999 的 3 位數數字,指出分割區的號碼。 例如,如果名稱為 dataFile.txt 的外部表格分成三個分割區,則組成它的檔案會具有名稱 dataFile.txt.000、dataFile.txt.001 及 dataFile.txt.002。 這些檔案必須可從所有成員存取。對於分割的外部表格,PARTITION 選項指定要套用陳述式的一或多個分割區:
- PARTITION ALL
- 陳述式適用於組成外部表格的所有分割區。 對於卸載作業,這是唯一容許的值。
- PARTITION (n TO n)
- 陳述式適用於指定範圍內的所有分割區,例如 PARTITION (54 TO 62)。
- PARTITION (n,n,…)
- 陳述式僅適用於指定的一或多個分割區,例如,PARTITION (53) 或 PARTITION (51,57,58)。 如果指定多個分割區號碼,則必須以遞增順序指定(sqlcode SQL0263N 與 SQLSTATE=42615),且不能有重複(sqlcode SQL0265N 與 SQLSTATE=42615)。
如果在對分割的外部表格執行作業時產生 .log 或 .bad 檔案,則產生的檔案名稱會以句點作為字尾,後面接著 3 位數的分割區號碼。
如果啟用 DPF 且未指定 PARTITION 選項,則會將外部表格視為協調程式成員上的單一分割表格。 外部表格檔案的名稱以及 .log 和 .bad 檔案的字尾不是分割區號碼。
如果未啟用 DPF ,則可以指定 PARTITION 選項,但只能使用值 ALL、(0 到 0) 或 (0) (SQL0644N)。 它不會有任何作用。
REMOTESOURCE 與 PARTITION 選項互斥。
- QUOTEDNULL
- 對於載入作業,如何解譯以單引號或雙引號括住且符合 NULLVALUE 或 NULL_VALUE 選項所指定空值的值(例如,"NULL" 或 'NULL'):
- TRUE 或 ON
- 該值會解譯為空值。 這是預設值。
- FALSE 或 OFF
- 該值會解譯為字串。
- QUOTEDVALUE 或 STRING_DELIMITER
- 資料值是否以引號括住:
- SINGLE 或 YES
- 資料值以單引號 (') 括住。
- DOUBLE
- 資料值以雙引號 (") 括住。
- NO
- 資料值不會以引號括住。 這是預設值。
- RECORDDELIM 或 RECORD_DELIMITER
- 要解譯為列(記錄)定界字元的字串文字。 預設值為
'\n'。當 CRINSTRING 設為 TRUE 時,RECORDDELIMM 不能包含 CR ('\r') 字元 - 只有 CRLF ('\r \n') 定界字元例外,CRINSTRING 只適用於文字格式。
- REMOTESOURCE
- 外部表格檔案所在的位置,如果它位於遠端系統上,則是否要壓縮檔案資料:
- LOCAL
- 檔案位於本端伺服器上,即管理資料庫的系統。 這是預設值。
- YES
- 檔案位於本端伺服器以外的系統上。 例如,如果用戶端系統連接至資料庫,且檔案位於該系統上,請指定 YES。 檔案資料在傳送之前不會壓縮。
- GZIP
- 與 YES 類似,除了在傳送資料之前使用 GZIP 壓縮演算法壓縮檔案資料,並在收到資料之後解壓縮。 當傳送大量可壓縮的資料時,這樣做可以提升整體效能。
- LZ4
- 與 YES 類似,除了在傳送資料之前使用 LZ4 壓縮演算法壓縮檔案資料,並在收到資料之後將其解壓縮。 當傳送大量可壓縮的資料時,這樣做可以提升整體效能。
REMOTESOURCE、SWIFT 和 S3 選項互斥。 REMOTESOURCE 與 PARTITION 選項互斥。 如果 REMOTESOURCE 選項的值是 GZIP 或 LZ4,則無法指定 COMPRESS 選項。 - REQUIREQUOTES
- 引號是否為必要:
- TRUE 或 ON
- 引號是必要的。 QUOTEDVALUE 選項必須設為 YES、SINGLE 或 DOUBLE。
- FALSE 或 OFF
- 引號不是必要的。 這是預設值。
- SKIPROWS 或 SKIP_ROWS
- 對於載入作業,這是要在開始載入資料之前跳過的列數。 預設值是 5。 因為跳過的列會在跳過之前先處理,所以跳過的列仍然能夠導致處理錯誤。
- SOCKETBUFSIZE
- 從原始檔讀取的資料片段大小(以位元組為單位)。 有效值範圍為 64 KB - 800 MB。 如果您指定超出此範圍的值,則該值會設為最接近的有效值。 預設值是 8 MB。
- STRICTNUMERIC
- 對於載入作業,當要插入 DECIMAL 欄位的值的小數位數超出針對該欄位定義的小數位數時,如何處理該值:
- TRUE 或 ON
- 拒絕包含要插入值的列。 例如,如果下列任何值要載入 DECIMAL(5,3) 欄位中,則會拒絕包含該值的列:
12.666666666 -98.34496862785 0.00089 - FALSE 或 OFF
- 接受包含要插入值的列,並截斷超出為欄位定義的小數位數的小數部分。 這是預設值。 例如,前一個範例中的值將轉換為:
12.666 -98.344 0.000
- SWIFT
- 指定來源資料檔位於 Swift 物件儲存庫中。 REMOTESOURCE、SWIFT 和 S3 選項互斥。 使用 DATAOBJECT 選項來指定檔名。
語法:
其中:SWIFT (endpoint, authKey1, authKey2, bucket)- 端點
- 指定 SWIFT Web 服務 URL 的字串。 authKey1
- 指定用來驗證使用者之 Swift 開放式堆疊帳戶的存取 ID 或使用者名稱的字串。 authKey2
- 指定用來驗證使用者之 Swift 開放式堆疊帳戶的密碼的字串。 儲存區
- 檔案所在 Swift 開放式堆疊儲存器(儲存區)的名稱。
範例:CREATE EXTERNAL TABLE exttab1(a int) using (dataobject 'datafile1.dat' swift('https://dal05.objectstorage.softlayer.net/auth/v1.0/', 'XXXOS123456-2:xxx123456', 'b207c6e974020737d92174esdf6d5be9382aa4c335945a14eaa9172c70f8df16', 'my_dev' ) ) - S3
- 指定來源資料檔位於 S3 相容物件儲存庫中。 REMOTESOURCE、SWIFT 和 S3 選項互斥。 使用 DATAOBJECT 選項來指定檔名。
語法:其中:
S3 (endpoint, authKey1, authKey2, bucket)- 端點
- 指定 S3 相容 Web 服務 URL 的字串。 authKey1
- 字串,指定用來驗證使用者及所有使用者動作之存取金鑰的 S3 存取金鑰 ID。對於 IBM Cloud Object Storage,這是來自 HMAC 認證的存取金鑰 ID。 authKey2
- 字串,指定用來驗證使用者及所有使用者動作之存取金鑰的 S3 秘密金鑰。對於 IBM Cloud Object Storage,這是來自 HMAC 認證的秘密存取金鑰。 儲存區
- 檔案所在的 S3 儲存區名稱。
附註: 對於 IBM Cloud Object Storage,若要建立 HMAC 認證,在建立新的服務認證時,請在 新增線型配置參數 欄位中指定{"HMAC:true}。使用 AWS S3 的範例:CREATE EXTERNAL TABLE exttab2(a int) using (dataobject 'datafile2.dat' s3('s3.amazonaws.com', 'XXXOS123456-2:xxx123456', 'bs07c6e974040737d92174e5e96d5be9382aa4c33xxx5a14eaa9172c70f8df16', 'my_dev' ) )使用 IBM Cloud Object Storage 的範例:CREATE EXTERNAL TABLE exttab2(a int) using (dataobject 'datafile2.dat' s3('s3-api.us-geo.objectstorage.softlayer.net', '1a2bkXXXsaddntLo0xX0', 'XXxxiEPjJ7T7WBUz74E6abcdABCDE8Q7RgU4gYY9', 'my_dev' ) ) - AZURE
- 注意: 此特性在 Db2 11.5 版 Mod Pack 1 或更新版本的僅限儲存器版本中提供。指定來源資料檔位於 Microsoft Azure Blob Storage 中。 REMOTESOURCE、SWIFT、S3 及 AZURE 選項互斥。 使用 DATAOBJECT 選項來指定檔名。 語法:語法:其中:
AZURE (endpoint, authKey1, authKey2, bucket)- 端點
- 指定 AZURE Web 服務 URL 的字串。 authKey1
- 指定用來驗證使用者之 Azure Blob Storage 帳戶的存取 ID 或使用者名稱的字串。 authKey2
- 指定用來驗證使用者之 Azure Blob Storage 帳戶的存取金鑰的字串。 儲存區
- 檔案所在 Azure Blob Storage 儲存器(儲存區)的名稱。
範例:CREATE EXTERNAL TABLE exttab1(a int) using (dataobject 'datafile1.dat' azure('https://my_account.blob.core.windows.net', 'my_account', 'lW+oHjmZecPS++IKgThAHlMUOaFUA5C6Z2RlFmc9JPpK34RO/ZIOywzILxJnzGPHz6d/yDrcQDAwH5wySbOZMQ==', 'my_bucket' ) )使用 IBM Cloud Object Storage 的範例:CREATE EXTERNAL TABLE exttab2(a int) using (dataobject 'datafile2.dat' s3('s3-api.us-geo.objectstorage.softlayer.net', '1a2bkXXXsaddntLo0xX0', 'XXxxiEPjJ7T7WBUz74E6abcdABCDE8Q7RgU4gYY9', 'my_dev' ) ) - TIMEDELIM
- 用來區隔時間元件的單位元組字元(小時、分鐘及秒)。 預設值為
':'。 如果 TIMEDELIM 設為空字串,則小時、分鐘及秒必須全部指定為兩位數數字。 TIMESTAMP_FORMAT 與 TIMEDELIM 選項互斥。 - TIMEROUNDNANOS 或 TIMEEXTRAZEROS
- 附註: 此選項僅適用於 TIMESTAMP 直欄。
- TIMESTYLE
- 將在資料檔案中使用的時間格式:
- 24HOUR
- 24 小時格式,例如 23:55。 這是預設值。
- 12HOUR
- 12 小時格式,例如 11:55 PM。 AM 或 PM 記號前面可以有單一空格,且不區分大小寫。
- TIMESTAMP_FORMAT
- 資料檔中時間戳記欄位的格式。 此值可以是 TIMESTAMP_FORMAT 純量函數接受的任何格式字串。 預設值為 'YYYY-MM-DD HH.MI.SS'。 TIMESTAMP_FORMAT 選項與 TIMEDELIM、DATEDELIM、TIMESTYLE 或 DATESTYLE 選項互斥。
- TIME_FORMAT
- 資料檔中的時間欄位格式。 此值可以是 TIMESTAMP_FORMAT 純量函數接受的任何時間格式字串。 預設值為 HH.MI.SS。 TIME_FORMAT 選項與 TIMEDELIM 或 TIMESTYLE 選項互斥。
- TRIMBLANKS
- 外部表格如何處理字串中的前導或尾端空白(亦即,前導或尾端空格字元):
- LEADING
- 移除所有前導空白(亦即,第一個非空白字元之前的空白)。
- TRAILING
- 移除所有尾端空白(亦即,最後一個非空白字元之後的空白)。
- 兩者
- 移除所有前導及尾端空白。
- NONE
- 不移除任何空白。 這是預設值。
- TRUNCSTRING 或 TRUNCATE_STRING
- 系統如何處理超出其宣告儲存體大小的 CHAR 或 VARCHAR 字串:
- 真
- 系統會截斷超出其宣告儲存體大小的字串值。
- 假
- 當字串值超出其宣告的儲存體大小時,系統會傳回錯誤。 這是預設值。
- Y2BASE
- 100 年範圍的開始年份。 指定為 2 位數的年份會從今年開始計算。 預設值為 2000。 當 DATESTYLE 設為 Y2MD、MDY2、DMY2、MONDY2 或 DMONY2 時,必須指定此選項。
表 3. 選項 選項 預設值 套用至載入 套用至卸載 Azure 注意: 此選項僅適用於 Db2 11.5 版 Mod Pack 1 或更新版本的僅限儲存器版本。(無預設值) Y Y BOOLSTYLE 或 BOOLEAN_STYLE 1_0 Y Y 基數 (無預設值) Y Y CCSID (無預設值) Y Y COMPRESS NO Y Y CRINSTRING 假 Y Y CTRLCHARS 假 Y N DATAOBJECT 或 FILE_NAME (無預設值) Y Y DATEDELIM '-' Y Y DATETIMEDELIM 空格 ('') Y Y DATESTYLE YMD Y Y DATE_FORMAT YYYY-MM-DD Y Y DECIMALDELIM 或 DECIMAL_CHARACTER '.' Y Y DELIMITER '|' Y Y ENCODING INTERNAL Y Y1 ESCAPECHAR 或 ESCAPE_CHARACTER (無預設值) Y Y FILLRECORD 假 Y N FORMAT 或 FILE_FORMAT 文字 Y Y IGNOREZERO 或 TRIM_NULLS 假 Y N INCLUDEHEADER 或 COLUMN_NAMES 假 N Y INCLUDEZEROSECONDS 假 Y Y INCLUDEHIDDEN 假 Y N LFINSTRING 假 Y N LOGDIR 或 ERROR_LOG 外部表格檔案的目標目錄 Y N MULTIPARTSIZEMB MULTIPARTSIZEMB dbm config 參數指定的值。 Y N MAXERRORS 或 MAX_ERRORS 1 Y N MAXROWS 或 MAX_ROWS 0 Y N MERIDIANDELIM 空格 ('') Y Y NOLOG 假 Y Y NULLVALUE 或 NULL_VALUE '空值' Y Y PARTITION (無預設值) Y Y QUOTEDNULL 真 Y N QUOTEDVALUE NO Y N RECORDDELIM 或 RECORD_DELIMITER ' \n' Y N REMOTESOURCE LOCAL Y Y REQUIREQUOTES 假 Y N SKIPROWS 或 SKIP_ROWS 0 Y N SOCKETBUFSIZE 8 MB Y Y STRICTNUMERIC 假 Y N SWIFT (無預設值) Y Y S3 (無預設值) Y Y TIMEDELIM ':' Y Y TIMEROUNDNANOS 或 TIMEEXTRAZEROS 假 Y N TIMESTAMP_FORMAT ' YYYY-MM-DD HH.MI.SS' Y Y TIMESTYLE 24HOUR Y Y TIME_FORMAT HH.MI.SS Y Y TRIMBLANKS NONE Y Y TRUNCSTRING 或 TRUNCATE_STRING 假 Y N Y2BASE 2000 Y N 1 僅適用於值 INTERNAL、UTF8 及 LATIN9。 - AS SELECT 陳述式
- 指定針對全選衍生結果表格中的每一個直欄,定義對應直欄給表格,並移入查詢結果。 每一個定義的直欄都採用結果表格之對應直欄中的下列屬性(如果適用於資料類型):
- 直欄名稱
- 欄說明
- 資料類型、長度、精準度及小數位數
- 可空值性
注意事項
- 無法處理的記錄(如果有的話)會以下列格式寫入檔案:
錯誤會以下列格式的名稱記載在檔案中:<database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.bad
這些檔案位於 LOGDIR 或 ERROR_LOG 選項指定的目錄中。<database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.log對於分割區上的作業,所產生 .bad 或 .log 檔案的名稱會以句點作為字尾,後面接著 3 位數的分割區號碼。
- 若要建立、插入或捨棄具名外部表格,請發出 CREATE、INSERT 或 DROP 陳述式。 您無法插入或捨棄暫時性外部表格。
- 捨棄外部表格會刪除表格定義,但不會刪除與表格相關聯的資料檔。
限制
- 遠端外部表格限制:
- 常式內不接受它
- 不容許使用 LOAD CURSOR
- 若為遠端外部表格 (亦即,外部表格不在 Swift 或 S3 物件儲存庫中,且 REMOTESOURCE 選項設為 LOCAL 以外的值):
附註: 單一查詢或子查詢無法一次從多個外部表格中選取,且無法多次參照相同的外部表格。 必要的話,請將數個外部表格中的資料結合成單一表格,並在查詢中使用該表格。
此外,聯集作業不能包含多個外部表格。
- 外部表格只能由作業系統內定義的使用者 ID 來查詢。
- 在 Windows 系統上執行的 Db2 實例無法使用外部表格。
- 要載入的資料必須適當地格式化。
- 您無法刪除、截斷或更新外部表格。
替代語法
- SAMEAS 可以用來取代 LIKE。
- 對於 REMOTESOURCE 選項,可以指定值 ODBC、JDBC 或 OLE-DB 來取代 YES。
- 如果 FORMAT 選項設為 INTERNAL,則可以針對 COMPRESS 選項指定值 YES 來取代 GZIP。
範例
- 將資料卸載至外部表格:
CREATE EXTERNAL TABLE 'order.tbl' USING (DELIMITER '|') AS SELECT * from orders;CREATE EXTERNAL TABLE 'export.csv' USING (DELIMITER ',') AS SELECT foo.x, bar.y, bar.dt FROM foo, bar WHERE foo.x = bar.x; - 從外部表格載入資料:
INSERT INTO target SELECT * FROM EXTERNAL 'data.txt' USING (DELIMITER '|');INSERT INTO orders SELECT * FROM EXTERNAL 'order.tbl'( order_num INT, order_dt TIMESTAMP) USING (DELIMITER '|'); - 從外部表格中選取資料:
SELECT * FROM EXTERNAL 'order.tbl' (order_num INT, order_dt TIMESTAMP) USING (DELIMITER '|');SELECT * FROM EXTERNAL 'test.txt' LIKE test_table USING (DELIMITER ',');SELECT x, y AS dt FROM EXTERNAL 'test.txt' ( x integer, y decimal(18,4) ) USING (DELIMITER ',');
