CREATE EXTERNAL TABLE 语句

虽然表通常驻留在数据库中,但外部表驻留在基于文本的定界文件,或在数据库外部的固定长度格式文件中中。

使用外部表来执行以下操作:
  • 将数据存储在数据库外部,同时保留查询该数据的能力。 要将数据从数据库卸载到外部文件中,请在下列其中一个 SQL 语句中将外部表指定为目标表:
    • INSERT SQL
    • SELECT INTO SQL
    • 创建外部表作为 SELECT SQL
  • 将数据从外部文件装入到数据库中的表中。 您可以执行诸如强制转换、连接和删除列之类的操作,以在装入期间处理数据。 要将数据从外部表装入到数据库中,请像对任何其他表一样在 SELECT SQL 语句中使用 FROM 子句。
  • 将数据传输到另一个应用程序。

将外部表用于“抽取-变换-装入”(ETL) 过程的一个优点是可以使用纯 SQL 来执行这些过程。 由于可以从任何 SQL 客户机启动基于 SQL 的 ETL 过程,因此不需要使用特殊 ETL 工具。

外部表具有以下其中一种类型:
指定的
外部表具有类似于正常表的名称和目录条目。
瞬态
外部表具有系统生成的格式为 SYSTET<number> 的名称,并且没有商品目录条目。 例如,系统可能创建一个瞬态外部表来保存查询结果。 这样一个表的生存期是查询的持续时间。

调用

此语句可以嵌入在应用程序中,也可以使用动态 SQL 语句发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。

授权

由该语句的授权标识所拥有的特权必须具有 DBADM 权限或以下特权或权限:
  • CREATETAB 权限
  • 下列其中一项特权或权限:
    • 对表空间的 USE 特权
    • SYSADM 权限
    • SYSCTRL 权限
  • 下列其中一项特权或权限:
    • 数据库上的 IMPLICIT_SCHEMA 权限(如果表的隐式或显式模式名称不存在)
    • 对模式的 CREATEIN 特权(如果该表的模式名称引用了现有模式)
    • 对模式的 SCHEMAADM 权限(如果该表的模式名称引用现有模式)
如果正在定义子表,那么必须满足以下其中一个条件:
  • 该授权标识必须与表层次结构的根表的所有者相同。
  • 该授权标识所具有的特权必须包括对包含表层次结构的根表的模式的 SCHEMAADM 权限。
  • 由授权标识所具有的特权必须包含 DBADM 权限。

语法

此语句的语法取决于要创建的外部表的性质:
  • 请使用以下语法在目录中为新的外部表创建表定义。 指定表名称是必需的,因此生成的外部表是指定的表。 必须指定 DATAOBJECT 或 FILE_NAME 选项以标识目标文件。
    Read syntax diagramSkip visual syntax diagram CREATE EXTERNAL TABLE table-name (,column-definition)LIKEtable-name1view-namenickname USING ( optionoption-value)
  • 使用以下语法来将现有表用作新外部表的模板,并使用源表的内容填充该表。 如果此语句显式指定表名,那么生成的外部表是命名表;否则,生成的外部表是瞬态表。 该文件名必须由 file-name 参数或 DATAOBJECT 或 FILE_NAME 选项指定。
    Read syntax diagramSkip visual syntax diagram CREATE EXTERNAL TABLE table-name file-name USING ( optionoption-value) AS fullselect
如果指定一个或多个列定义,那么以下附加参数适用:
column-definition
Read syntax diagramSkip visual syntax diagram column-name built-in-typeNOT NULL
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( precision-integer,0, scale-integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATACLOBCHARACTERCHARLARGE OBJECT(65535)( integerKOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(32767)( integerKCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(16383)( integerK)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(65535)( integerK)DATETIMETIMESTAMP(6)(integer)BOOLEAN

描述

table-name
这是外部表的名称。 该名称(包括隐式或显式限定符)不得标识已在目录中描述的表、视图、昵称或别名。 模式名不能为 SYSIBM、SYSCAT、SYSFUN 或 SYSSTAT (SQLSTATE 42939)。
file-name
要包含要创建的外部表的文件(或任何可被视为文件的介质)的标准名称。 如果指定了此参数,那么不能指定 DATAOBJECT 或 FILE_NAME 选项。
如果输入数据文件为 gzip 压缩,那么将检测到此数据,并且 Db2® 服务器将对数据进行解压缩。 可以使用 COMPRESS GZIP 选项,但对于装入 gzip 压缩文件,此选项不是必需的。
如果输入数据文件是 lz4 压缩的,那么必须指定 COMPRESS LZ4 选项。

如果同时将 REMOTESOURCE 选项设置为 LOCAL(这是其缺省值),并且 extbl_strict_io 配置参数设置为 NO,那么外部表文件的路径是绝对路径,并且必须是 extbl_location 配置参数指定的路径之一。 否则,外部表文件的路径是相对于由 extbl_location 配置参数指定的路径,后跟表定义者的授权标识。 例如,如果将 extbl_location 设置为 /home/xyz,并且表定义者的授权标识为 user1,那么外部表文件的路径相对于 /home/xyz/user1/

该文件名必须是有效的 UTF-8 字符串。
对于装入操作,以下情况适用:
  • 该文件必须已经存在。
  • 必需许可权:
    • 如果外部表是指定的外部表,那么所有者必须具有对该文件的读许可权以及对 LOGDIR 目录的写许可权。
    • 如果外部表是瞬态外部表,那么该语句的授权标识必须具有对该文件的读许可权以及对 LOGDIR 目录的写许可权。
对于卸装操作,适用以下条件:
  • 如果文件已经存在会被覆盖掉。
  • 必需许可权:
    • 如果外部表是已命名的外部表,那么所有者必须对此文件的目录具有读和写许可权。
    • 如果外部表是瞬态的,那么该语句的授权标识必须对此文件的目录具有读和写许可权。
column-definition
定义列的属性。
列名称
指定表列。 名称不能限定,并且同一名称不能用于表的多列 (SQLSTATE 42711)。
内置类型
下列其中一种内置数据类型:
SMALLINT
一个小整数。
[ 整数 | 整数 ]
一个大整数。
BIGINT
一个大整数。
[DECIMAL | DEC | NUMERIC | NUM] (precision-integerscale-integer)
十进制数字。
  • 精度整数指定总数字数。 它必须在 1 - 31 范围内。 缺省值为 5。
  • 小数位整数指定小数点右边的数字位数。 不能为负数,也不能超过精度。 缺省值为 0。
FLOAT(integer)
单精度浮点数或双精度浮点数。 如果指定的长度在以下范围内:
  • 1 - 24,数字使用单精度
  • 25 - 53,该数字使用双精度
您可以指定以下内容而不是 FLOAT:
REAL
用于单精度浮点。
对于双精度浮点数。
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。
FOR BIT DATA
指定将列的内容视为位(二进制)数据。 与其他系统进行数据交换期间,不执行代码页转换。 比较以二进制进行,与数据库整理顺序无关。
FOR BIT DATA 子句不能与字符串单位 CODEUNITS32 一起指定 (SQLSTATE 42613)。
[CLOB | CHARACTER LARGE OBJECT | CHAR LARGE OBJECT] (integer [K] [OCTETS | CODEUNITS32])
最大长度为指定代码单元数的字符大对象字符串。 缺省最大长度为 65,535 字节。
如果要将长度整数乘以 1024 ,请指定 K (千) 乘数。
  • 无论您是否使用 K 乘数,生成的长度都受外部表中 CLOB 列 (即 65,535 OCTETS , 32,767 CODEUNITS16或 16,383 CODEUNITS32) 的最大长度限制。 请注意,64K OCTETS 和 16K CODEUNITS32 各超出一个最大长度,因此不允许使用。
  • 在数据类型与长度规范之间或长度整数与 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 一样。 仅在 Unicode 数据库中,才可指定 CODEUNITS32 (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 (千) 乘数。
  • 无论您是否使用 K 乘数,生成的长度都由外部表中 DBCLOB 列的最大长度限制,即 32,767 CODEUNITS16 或 16,383 CODEUNITS32。 请注意, 32K CODEUNITS16 和 16K CODEUNITS32 都比最大长度超出一个,因此不允许使用。
  • 在数据类型与长度规范之间或长度整数与 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 一样。 仅在 Unicode 数据库中,才可指定 CODEUNITS32 (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 数据库配置参数的当前值,该参数还定义字符串单位。 请参阅 CLOB 或 DBCLOB 参数 (以适用者为准) 的描述,以获取有关长度整数的可能值以及如何使用 K (千) 乘数的信息。

BINARY(integer)
指定长度的固定长度二进制字符串,必须在 1-255 个字节的范围内。 默认长度为 1。
[VARBINARY | BINARY VARYING](integer)
指定最大长度的可变长度二进制,必须在 1 到 32672 个字节的范围内。
[BLOB | BINARY LARGE OBJECT] (整数 [K])
一个二进制大对象字符串,其最大长度为指定的代码单元数。 缺省最大长度为 65,535 字节。
如果要将长度整数乘以 1024 ,请指定 K (千) 乘数。
  • 无论您是否使用 K 乘数,生成的长度都由外部表中 BLOB 列的最大长度 (即 65,535 字节) 限制。 请注意,64K 超出最大长度 1,因此是不允许的。
  • 在数据类型与长度规范之间或长度整数与 K 乘数之间允许任何数目的空格 (包括零个空格)。 例如,以下规范都是等效且有效的:
    BLOB(50K)
    BLOB(50 K)
    BLOB (50   K)
  • 可以大写或小写指定 K 乘数。
日期
日期。
时间
时间。
TIMESTAMP(integer) 或 TIMESTAMP
时间戳记。 整数指定小数的小数位数,从 0(秒)到 12(皮秒)。 缺省值为 6(微秒)。
布尔值
布尔值。
LIKE table-name1 or view-name or nickname
指定表中的列与指定表 (table-name1) 、视图 (视图名称) 或昵称 (昵称) 中的列具有相同的名称和描述。 指定的表、视图或昵称必须存在于目录中,或者必须是已声明的临时表。 不能指定类型化表或类型化视图 (SQLSTATE 428EC)。
使用 LIKE 表示隐式定义 N 列,其中 N 是所标识的表(包括隐式隐藏的列)、视图或昵称中的列数。 对应于现有表中隐式隐藏列的新表列也将被定义为隐式隐藏。 隐式定义取决于在 LIKE 之后指定的内容:
  • 如果指定了一个表,则隐式定义包括该表的每个列的列名、数据类型、隐藏属性和可空性特征。 如果未指定 EXCLUDING COLUMN DEFAULTS,那么还包括列缺省值。
  • 如果指定了视图,则隐式定义包括该视图中定义的全查询的每个结果列的列名、数据类型和可空性特征。 视图列的数据类型必须是对表列有效的数据类型。
  • 如果指定了昵称,则隐式定义包含该昵称的每一列的列名、数据类型和可空性特征。
  • 如果指定了受保护表,则新表将继承与所标识表相同的安全策略和受保护列。
  • 如果指定了一个表,并且该表包含行起始列、行结束列或事务起始标识列,则新表的相应列仅继承源列的数据类型。 新列不被视为生成列。
  • 如果指定了包含时间段的表,那么新表将不继承时间段定义。
  • 如果指定了系统周期临时表,那么新表不是系统周期临时表。
  • 如果指定了使用随机(通过生成)方法的随机分布表,并且正在创建的新表不共享相同的表分布,则不包括用于生成随机分布值的 RANDOM_DISTRIBUTION_KEY 列。

可以根据 copy-attributes 子句来包含或排除列缺省属性。 隐式定义不包括指定的表、视图或昵称的任何其他属性。 因此,新表没有任何主键、唯一约束、外键约束、引用完整性约束、触发器、索引、ORGANIZE BY 规范或 PARTITIONING KEY 规范。

如果在 LIKE 子句中标识了一个表并且该表包含 ROW CHANGE TIMESTAMP 列,那么新表的对应列仅继承 ROW CHANGE TIMESTAMP 列的数据类型。 不会将新列视为生成的列。

如果指定了一个表,并且对该表激活了行或列级别访问控制,那么新表不会继承该表。

选项
以下选项控制将数据装入到外部表文件或从外部表文件中检索数据。 每个选项的值都是一个文本字符串,并且不区分大小写。
二进制数
指定以二进制格式输入数字数据,而不是以 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
在装入操作期间,所有布尔值都必须使用相同的样式。 此选项指定要使用的 Boolean 样式:
  • 1_0(这是缺省值)
  • T_F
  • Y_N
  • YES_NO
  • TRUE_FALSE
CARDINALITY
非零正整数值,用于覆盖对预期返回行数的估算。
CCSID
输入数据文件中的编码字符集标识 (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 压缩算法对数据文件数据进行压缩。
未对数据文件数据进行压缩。 这是缺省值。
LZ4
数据文件数据是使用 LZ4 压缩算法进行压缩的。
如果 REMOTESOURCE 选项的值为 GZIP 或 LZ4,那么将无法指定 COMPRESS 选项。
CRINSTRING
如何解释未转义的回车符 (CR) 或回车符换行 (CRLF) 字符:
TRUE 或 ON
未转义的 CR 字符将解释为数据,而不是记录定界符。
FALSE 或 OFF
未转义的 CR 将解释为记录定界符。 这是缺省值。
仅当 CtrlChars 选项的值设置为 OFF 时,才对 CRINSTRING 使用固定长度格式。
CTRLCHARS
是否允许在 CHAR 或 VARCHAR 字段 ASCII 值 1 - 31。 必须对任何 NULL、CR 或 LF 字符进行转义。 允许值为:
TRUE 或 ON
允许在 CHAR 或 VARCHAR 字段中使用 ASCII 值 1 - 31。
如果启用了固定长度格式,那么允许所有未转义的字符。
FALSE 或 OFF
不允许在 CHAR 或 VARCHAR 字段中使用 ASCII 值 1-31。 这是缺省值。
如果启用了固定长度格式,那么未转义的字符将导致错误。
固定长度格式的异常:
  • \t, \n
  • \r 如果将 CRinString 选项设置为 ON
DATAOBJECT 或 FILE_NAME
要包含要创建的外部表的文件(或任何可被视为文件的介质)的标准名称。 如果未在表名之后立即指定文件名,那么此选项是必需的; 否则,将不允许此选项。

如果同时将 REMOTESOURCE 选项设置为 LOCAL(这是其缺省值),并且 extbl_strict_io 配置参数设置为 NO,那么外部表文件的路径是绝对路径,并且必须是 extbl_location 配置参数指定的路径之一。 否则,外部表文件的路径是相对于由 extbl_location 配置参数指定的路径,后跟表定义者的授权标识。 例如,如果将 extbl_location 设置为 /home/xyz,并且表定义者的授权标识为 user1,那么外部表文件的路径相对于 /home/xyz/user1/

该文件名必须是有效的 UTF-8 字符串。
对于装入操作,以下情况适用:
  • 该文件必须已经存在。
  • 必需许可权:
    • 如果外部表是指定的外部表,那么所有者必须具有对该文件的读许可权以及对 LOGDIR 目录的写许可权。
    • 如果外部表是瞬态外部表,那么该语句的授权标识必须具有对该文件的读许可权以及对 LOGDIR 目录的写许可权。
对于卸装操作,适用以下条件:
  • 如果文件已经存在会被覆盖掉。
  • 必需许可权:
    • 如果外部表是已命名的外部表,那么所有者必须对此文件的目录具有读和写许可权。
    • 如果外部表是瞬态的,那么该语句的授权标识必须对此文件的目录具有读和写许可权。
DATEDELIM
定界字符,用于根据 DATESTYLE 选项指定的格式来分隔日期的组件。 如果指定空字符串,那么日期组件之间没有定界符,并且必须将天数和月数指定为两位数字。 DATESTYLE 设置为 MONDY 或 MONDY2,缺省 DATEDELIM 值为空格。 TIMESTAMP_FORMAT 和 DATEDELIM 选项是互斥的。
DATESTYLE
怎样解释日期格式。 对于 1 到 9 内的日期或月份,请使用 1 个数字、2 个数字或后跟一位数字的空格。 当 DATEDELIM 选项为空格时,您可以在该天之后指定逗号。 如果您执行以下操作,那么会发生错误:
  • 指定日期、月份或年份为零
  • 指定不存在的日期(例如,8 月 32 日或 2 月 30 日)
DATESTYLE 选项和 DATE_FORMAT 或 TIMESTAMP_FORMAT 选项是互斥的。
表 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 位数的年份。 2014 年 3 月 21 日
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 位数的年份。 卸载不支持此功能。 14 年 3 月 21 日
DMONY2 2 位数的天,3 个字符的月份,2 位数的年份。 卸载不支持此功能。 21-Mar-14
DATETIMEDELIM
一个单字节字符,用于分隔时间戳记数据类型的日期部分和时间部分。
缺省定界符为空格 (' ')。
在“日期”组件与“时间”组件之间,不需要定界符。 例如,以下两个值都是有效的:
2010-10-10 10:10:10
2010-10-1010:10:10
DATE_FORMAT
数据文件中“日期”字段的格式。 该值可以是 TIMESTAMP_FORMAT 标量函数接受的任何日期格式字符串。 缺省值为 YYYY-MM-DD。 DATE_FORMAT 选项与 DATEDELIM 或 DATESTYLE 选项互斥。
DECIMALDELIM 或 DECIMAL_CHARACTER
数据类型 FLOAT、DOUBLE、TIME 和 TIMESTAMP 的十进制定界符。 允许的值为 ',''.'
DECPLUSBLANK
指定在卸载操作期间正十进制值的表示方式。
您可以为该选项指定下列其中一个值:
NONE
这是缺省值。
此值表示不带符号的正十进制值。
PLUS
指定由 '+' 符号表示的正十进制值。
BLANK
指定正的十进制值由空格符号而不是 '+' 符号表示。
如果您为装入操作指定 DECPLUSBLANK 选项,那么输出不受影响。
带有 ddl (decimal (6, 2)) 和 DECPLUSBLANK 选项的所有可用值的表测试示例:
1234
-4563
  • 使用 (DECPLUSBLANK NONE) 作为测试中的选择 * 来创建外部表“/tmp/unload.txt'”:
    unload.txt
    1234.00
    -4563.00
  • 使用 (DEPLUSBLANK Plus) 作为来自测试的选择 * 来创建外部表“/tmp/unload.txt'”:
    unload.txt
    +1234.00
    -4563.00
  • 使用 (DECPLUSBLANK) 作为测试中的选择 * 来创建外部表“/tmp/unload.txt'”:
    unload.txt
     1234.00
    -4563.00
DELIMITER 或 COLUMN_DELIMITER
这是用于对输入或输出记录的字段进行定界的字符。 缺省值为竖线 ('|')。
可以通过以下任何方式在 7 位 ASCII 范围(十进制 1 - 127)内指定字符:
  • 作为单个字符(例如,DELIMITER ';'
  • 通过指定其对应的 ASCII 十进制值(例如,DELIMITER 59DELIMITER '59'
  • 通过指定其对应的 ASCII 十六进制值(例如,DELIMITER x'3B'

只有通过指定其相应的 ASCII 十进制值或十六进制值,ISO 字符集输入文件才支持十进制范围 128 - 255。 如果输入文件在 UTF8 字符集中,那么不支持此定界符值范围。

ENCODING
该文件中的数据类型:
UTF8
该文件使用 UTF8 encoding 用于所有字符数据
LATIN9
该文件将 LATIN9 编码 用于所有字符数据
INTERNAL
该文件同时使用 UTF8 和 LATIN9 编码的组合,或者您不确定使用哪种类型的编码。 系统会检查数据,并根据需要将数据编码。 检查数据会导致整体性能下降,因此只有在必要时才应使用此值。 这是缺省值。
INTERNAL
这是缺省选项。
该文件同时混合使用 UTF8 和 LATIN9 编码。
文件以 Netezza 内部格式进行编码,因此应该仅用于通过使用 ENCODING (INTERNAL) 从 Netezza 抽取的文件。
当目标列为 CODEUINTS32 (NCHAR/VARCHAR) 时,将验证输入数据是否为有效的 UTF-8 字符。
此选项仅在 Unicode 数据库中受支持。
DBCS_GRAPHIC
此值仅允许用于装入操作,而不允许用于卸载操作。 如果指定了此值,那么还必须指定 CCSID 选项。 在装入操作期间,将使用指定 CCSID 的双字节字符集对类型为 GRAPHIC 或 VARGRAPHIC 的字段进行编码;使用指定 CCSID 的混合字节字符集对所有其他类型的字段进行编码。
注: 对于 EXPORT 实用程序创建的 DEL 文件,不能将 ENCODING 设置为 DBCS_GRAPHIC ,因为此类 DEL 文件是使用单个字符集进行编码的。
当 ENCODING 选项的值为 UTF8, LATIN9或 INTERNAL 时, CCSID 和 ENCODING 选项互斥。
ESCAPECHAR 或 ESCAPE_CHARACTER
要将哪个字符视为转义字符。 转义字符指示它后面的字符(否则将被视为字段定界字符或行尾顺序字符)将被视为字段中的值的一部分。 对于图形字符串数据,将忽略转义字符。 没有缺省值。
FILLRECORD
对于装入操作,会将记录字段从左到右装入到目标表的列中。 此选项指定输入记录所包含的字段是否可以少于为目标表定义的列数:
TRUE 或 ON
输入行可以包含更少的字段,前提是缺少值的所有列都是可空的。 缺失值设置为 NULL。 如果缺少值的一列或多列不可为空,那么将拒绝该记录。
FALSE 或 OFF
包含较少列的输入行将被拒绝。 这是缺省值。
FORMAT 或 FILE_FORMAT
源文件的数据格式如下所示:
文本
要装入或卸载的数据是文本定界格式的。 这是缺省值。
INTERNAL
这些数据采用 Netezza Platform Software (NPS) 使用的内部格式。 仅当将数据从文件装入到数据库时,而不是当将数据卸载到文件时,此值才有效。 如果对 FORMAT 选项指定了此值,那么还必须指定下列选项,并且仅指定这些选项:
  • DATAOBJECT 或 FILE_NAME。
  • REMOTESOURCE、SWIFT 或 S3。 如果指定了 REMOTESOURCE 选项,那么它必须具有值 LOCAL 或 YES。
  • COMPRESS。 此值必须设置为 GZIP。
BINARY
数据是由 Db2 使用的内部格式。
FIXED
该数据采用固定长度格式。
只有装入操作才支持固定长度的格式。
固定长度格式的文件使用顺序位置(即偏移量)来标识字段在记录中的位置。
注:
  • 对于固定长度格式,以下外部表选项不受支持:
    • 定界符
    • 编码
    • EscapeChar
    • FillRecord
    • IgnoreZero
    • IncludeZeroSeconds
    • Lfinstring
    • QuotedValue
    • RequireQuotes
    • TimeExtraZeros
    • TruncString
  • 不存在字段定界符。
  • 即使是最后一条记录,也需要记录结束定界符。
  • 通常,固定长度格式文件中的数据没有十进制定界符或时间定界符,因为定界符不是必需的且使用空格。
  • 定界符的位置是固定的,并在布局定义中指定,因为字段大小是固定的。 此定义随固定长度格式的数据文件一起提供。
  • 要将固定格式的数据装入到数据库中,您必须定义字段的目标数据类型以及记录中的位置。
  • 您不必将所有字段都装入固定长度格式文件。 您可以使用填充符规范跳过这些操作。
  • 数据文件中字段的顺序必须与目标表中的顺序相匹配。 或者,您必须创建一个外部表定义,以指定字段作为数据库列的顺序。
  • 您可以结合插入选择语句使用外部表定义来更改字段顺序。
  • 通常,未知值或空值由分类为表示空值的已知数据模式表示。
当外部表的 FORMAT 选项设置为 FIXED 时,下列参数适用:
布局
必需。
布局是区域定义或字段定义的有序集合。 它定义了输入记录字段的位置。
在花括号 { } 中指定以逗号分隔的区域定义。
每个区域定义都由相互排斥、不重叠的条款组成。
无缺省值。
分句必须按以下顺序排列,即使其中一些分句是可选的,也可以是空的:
USE TYPE
可选。
指示区域是正常数据区域、参考区域还是填充区域。
对于数据区域,将省略此值。
引用区域被指定为 REF。 此说明意味着,区段长度或空值由另一区段引用。
填充板区域指定为 FILLER。 填充板区域指定将字节或字符视为数据文件中的填充板。
名称
可选。
这是区域的名称。
当前,未使用此定义。 通常情况下,它是用来标识字段的。
类型
可选。
定义该区域的类型。
如果您未指定类型,那么它将获取表列的相应类型的缺省值。
有效值如下所示:
  • CHAR
  • VARCHAR
  • NCHAR
  • NVARCHAR
  • SMALLINT
  • BIGINT
  • BINARY
  • VARBINARY
  • GRAPHIC
  • VARGRAPHIC
  • FLOAT
  • DEC、NUM 或 NUMERIC
  • DECFLOAT
  • 布尔值
  • 日期
  • 时间
  • TIMESTAMP
STYLE
可选。
定义区域表示。
缺省表示以区域类型和格式选项为基础。
所有其他样式仅对其相应的非文本区域类型有效。
有效值如下所示:
  • INTERNAL

    仅对文本区域(即 char、varchar、nchar 和 nvarchar)有效。

  • DECIMAL

    对于整数和数字区域类型有效。

  • DECIMALDELIM <'decimal-delim'>

    对于数字、浮点、双精度和时间样式(时间和时间戳记)区域类型有效。

  • FLOATING

    对于浮点型或双精度型区域类型有效。

  • EXPONENTIAL

    对于浮点型或双精度型区域类型有效。

  • YMD <'date-delim'>

    对于日期区域有效,包括对于 DateStyle 和 DateDelim 外部表选项支持的其他日期样式。

  • 12Hour <'time-delim'>

    对于时区有效,包括针对 TimeStyle 和 TimeDelim 外部表选项支持的其他时间样式。

  • 24Hour <'time-delim'>

    对于时区有效,包括针对 TimeStyle 和 TimeDelim 外部表选项支持的其他时间样式。

  • YMD <'date-delim'> 24Hour <'time-delim'>

    对于时间戳记区域有效,包括 DateStyle、DateDelim、TimeStyle 和 TimeDelim 外部表选项支持的日期和时间样式的其他组合。

  • TRUE_FALSE、Y_N 和 1_0

    对于布尔区域有效,包括 BoolStyle 外部表选项支持的其他布尔样式。 样式必须与格式一致。

LENGTH
可选。
指定为字节或字符,后跟对引用区域的数字或内部引用。
提供的字节或字符数,或引用区域引用的字节或字符数。
对于引用区域或填充板区域,不能使用内部引用。 对于参考区域,字节数指定如何从数据文件中读取数据以获取引用的值。
您可以使用加号和减号,如下所示:
BYTES @2 + 10
BYTES @2 - 10
NULLIF
可选。
区域 NULLESS 属性的定义。
指定字段中的已知数据模式,当该模式存在时,表示该字段为空。
长度等于或小于列的宽度。 最大长度为 39 个字节。
如果在表中的任何区域上使用 NULLIF 子句,那么不支持 NULLVALUE 选项。
您可以使用以下类型的引用:
@
对数字区域的内部引用。
数字值的完全匹配。
&
外部引用。
指定值的完全匹配。
&&
隔离引用。
对于完全匹配的字符串,将跳过前导空格和尾部空格。
以下示例中详细描述了空值:
表 2. 布局示例
使用类型 名称 类型 样式 长度 Nullif
NA f1 int4 DECIMAL 字节 10 Nullif & = 0
NA f2 日期 YMD 字节 10 Nullif &= '2000-10-10'
NA f3 char(20) INTERNAL 字符 10 Nullif &&='ab'
填充 f4 char(10) NA 字节 10 NA
请切记:
  • 在长度子句中引用的区域必须为整数类型。
  • 对于引用区域或填充板区域,不得指定 NULLIF 选项。
  • 引用区域和填充板区域不能具有可变长度。
  • 可变长度区域不能引用自身。
  • 将长度子句中引用的区域定义为 REF。
  • Length-clause 引用只能使用 INTERNAL (@) 引用。 不支持外部引用或隔离引用。
  • 在长度子句的引用区域与该区域本身之间,不允许引用区域。
  • 如果引用类型为 INTERNAL (@),那么 NULLIF 子句无法引用其自身。
  • 如果该列不可为空,那么它可能不具有 NULLIF 子句。
  • 仅对于区域的字符串类型,才允许可变长度。
  • NULLIF 子句仅可引用 REF 区域或区域本身。
  • 在由 NULLIF 子句引用的区域与区域本身之间,不允许其他引用的区域,但在长度子句中引用的区域除外。
  • 记录长度只能指向区域 1 以进行参考。
  • REF 必须具有引用该 REF 的区域。
  • 仅当 REF 区域为非整数时,NULLIF 子句才可以具有外部引用。
Recordlength
指定整个记录的长度,如果存在空指示符字节,那么将包含这些字节,如果存在,那么将排除记录定界符。
该值为常量整数。
该值也可以是对布局定义中的引用区域的内部引用。
没有缺省值。
您可以使用加号和减号来进行内部引用,如下所示:
RECORDLENGTH @1 + 10
RECORDLENGTH @1 - 10
IGNOREZERO 或 TRIM_NULLS
指定是否要废弃 CHAR 字段和 VARCHAR 字段中的二进制值 0。
TRUE 或 ON
字节值零被忽略。
FALSE 或 OFF
字节值零未被忽略。 这是缺省值。
KEEP
二进制值零被接受,并且允许作为输入字段的一部分。
INCLUDEHEADER 或 COLUMN_NAMES
对于卸载操作,是否要将表列名称作为标题包括在外部表文件中:
TRUE 或 ON
表列名称将作为标题包括在内。
FALSE 或 OFF
不将表列名称作为标题包括在内。 这是缺省值。
INCLUDEZEROSECONDS
对于卸载操作,是否将 00 指定为秒的值(如果没有秒的值可用):
TRUE 或 ON
指定 00 作为秒的值。
FALSE 或 OFF
请不要指定秒数值。 这是缺省值。
INCLUDEHIDDEN
对于装入操作,请指定数据文件中是否存在隐藏的列值。

当您使用 LIKE 或 SAMEAS 子句来创建外部表,并且基本表具有隐藏列时,INCLUDEHIDDEN 选项将生效。

TRUE
数据文件包含针对隐藏列的值。
FALSE
数据文件不包含针对隐藏列的值。 这是缺省值。 您可以通过使用注册表变量 DB2_EXTBL_INCLUDE_HIDDEN_COLS 来更改缺省值。
LFINSTRING
指定如何在字符串数据中解释未转义的行订阅源(有时称为 LF 或换行符)字符:
TRUE 或 ON
仅当未转义的 LF 字符位于记录的最后一个字段时,才会将其解释为记录定界符;否则,会将其视为数据。 要使记录的最后一个字段中的 LF 字符被视为数据,请将该字段的值括在单引号或双引号中。
FALSE 或 OFF
未转义的 LF 字符被解释为记录定界符,而与其位置无关。 这是缺省值。

对于卸载操作,不支持此选项。

注意: 此 SQL 兼容性增强功能仅在 Db2 V 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
日志文件。
缺省值是将外部表文件写入到的目录。 如果为 .bad 或 .log 文件构造的名称长度将超过允许的最大值,那么将截断包含外部表(由 <file-name> 指示)的文件的名称,以便不超过最大长度。

如果在对分区执行操作时生成 .log 或 .bad 文件,那么生成的文件的名称将以句点作为后缀,后跟 3 位数字的分区号。

MAXERRORS 或 MAX_ERRORS
对于装入操作,这是系统停止处理并立即回滚该装入的已拒绝记录数的阈值。 缺省值为 1(即,单个被拒绝的记录导致回滚)。
对于固定长度的格式,以下条件适用:
  • 解析器针对每个字段或区域报告错误,而不是针对该行报告一个错误。
  • 对于同一行,可以报告多个错误。
  • 当解析器在字段或区域中检测到错误时,它将使用字段长度或区域长度进行恢复。 然后,它从下一个字段或区域继续,直到到达记录末尾,发生不可恢复的错误或者达到 MaxErrors 限制。
  • 不可恢复的错误包括以下错误:
    • RecordLength 不匹配。
    • 找不到 RecordDelimiter。
    • RecordLength 值无效,即,该值为负值或零。
    • 区域长度无效,即,该值为负值。
    • UTF-8 的初始字节无效。
    • UTF-8 个连续字节无效。
MULTIPARTSIZEMB

DB2_ENABLE_COS_SDK 注册表变量设置为 ON 时,通过嵌入式供应商 COS SDK 促进 Db2 远程存储器 与云对象存储器的通信,该 SDK 允许 Db2 将对象/文件以多个部分(又称为“多重部件上传”)形式流式传输到云对象存储器。 此参数指定要卸载的文件的分块上传的分块大小(以兆字节 (MB) 为单位),并覆盖 MULTIPARTSIZEMB dbm config 参数中指定的值。 从 V11.5 修订包 7 开始,仅在 Linux (x86) 环境中提供此选项。

MAXROWS 或 MAX_ROWS
如果设置为正整数,那么这将指定外部表中要处理的最大记录数(行数)。 如果设置为 0(缺省值),那么将没有限制并且将处理所有行。 在装入操作期间,如果 MAXROWS 设置为正值,那么在处理该行数后,无论某些行是被拒绝还是被跳过,系统都将结束装入操作并落实所有已插入的记录。
MERIDIANDELIM
一个单字节字符,它以时间值的 12 小时定界和未定界格式将秒部分与 AM 标记或 PM 标记分隔开。
缺省定界符为空格 (' ')。
在秒组件与 AM 令牌或 PM 令牌之间,不需要定界符。 例如,以下两个值都是有效的:
1:02:46.12345 AM
1:02:46.12345AM
NOLOG
指定是否已创建外部表的 .log 文件。
此选项不适用于 .bad 个文件。
可能的值包括:
TRUE
未创建 .log 文件。
FALSE
.log 文件已创建。
这是缺省值。
NULLVALUE 或 NULL_VALUE
最多 4 个字节的 UTF-8 字符串,将用于指示 null 值。 缺省值为 'NULL'
PARTITION
如果为数据库启用了数据库分区功能 (DPF) ,那么可以将外部表分区为多个文件。 组成外部表的每个数据文件的名称都以句点作为后缀,后跟 3 位数字(从 000 到 999),该数字指示分区的编号。 例如,如果名称为 dataFile.txt 的外部表划分为三个分区,那么组成该表的文件将具有名称 dataFile.txt.000dataFile.txt.001dataFile.txt.002。 这些文件必须可从所有成员访问。
对于分区外部表,PARTITION 选项指定该语句应用于哪个或哪些分区:
PARTITION ALL
该语句将应用于构成外部表的所有分区。 对于卸载操作,此值是唯一允许的值。
PARTITION (n TO n)
该语句将应用于指定范围内的所有分区,例如,分区(54 到 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
将数据值括在单引号 (') 中。
将数据值括在双引号 ("") 中。
数据值未括在引号中。 这是缺省值。
RECORDDELIM 或 RECORD_DELIMITER
要被解释为行(记录)定界符的字符串字面值。 缺省值为 '\n'

当 CRINSTRING 设置为 TRUE 时,RECORDDELIM 不能包含 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
对于装入操作,在开始装入数据前跳过的行数。 缺省值为 0。 因为跳过的行是在跳过之前处理的,所以跳过的行仍能够导致处理错误。
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 Service 的 URL。
authKey1
这是一个字符串,用于指定用于验证用户的 Swift 开放式堆栈帐户的访问标识或用户名。
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 Service 的 URL。
authKey1
这是一个字符串,用于指定用于验证用户和所有用户操作的访问密钥的 S3 访问密钥标识。对于 IBM Cloud Object Storage,它是来自 HMAC 凭证的访问密钥标识。
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
指定该源数据文件位于 Microsoft Azure Blob Storage 中。 REMOTESOURCE、SWIFT、S3 和 AZURE 选项是互斥选项。 使用 DATAOBJECT 选项来指定文件名。 语法:
语法:
AZURE (endpoint, authKey1, authKey2, bucket)
其中:
端点
这是一个字符串,用于指定 AZURE Web Service 的 URL。
authKey1
这是一个字符串,用于指定用于验证用户的 Azure Blob Storage 帐户的访问标识或用户名。
authKey2
这是一个字符串,用于指定用于验证用户的 Azure Blob Storage 帐户的访问密钥。
存储区
该文件所在的 Azure Blob 存储容器(存储区)的名称。
示例:
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 或 TIMEEXTRASEZEROS
注: 此选项仅适用于 TIMESTAMP 列。
指定是接受(并舍入到最接近的微秒)还是拒绝包含非零精度超过 6 个小数位的时间值的记录:
TRUE
接受所有记录。 它们的时间值将舍入为最接近的微秒。
FALSE
只接受那些可以存储而不丢失精度的记录(例如,“08.15.32.123”或 “08.15.32.12345600000”,但不接受“08.15.32.1234567”)。 所有其他记录都将被拒绝。 这是缺省值。
TIMESTYLE
要在数据文件中使用的时间格式:
24HOUR
24 小时制格式,例如 23:55。 这是缺省值。
12HOUR
12 小时制格式,例如 11:55 PM。 AM 或 PM 标记之前可以有单个空格,并且不区分大小写。
TIMESTYLE 选项与 TIME_FORMAT 或 TIMESTAMP_FORMAT 选项互斥。
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
所有尾部空格(即,最后一个非空白字符后面的空格)都将除去。
BOTH
除去所有前导空格和尾部空格。
NONE
不除去任何空白。 这是缺省值。
从文件中读取数据并将其装入到外部表时:
  • 如果将 QUOTEDVALUE 或 STRING_DELIMITER 与值 SINGLE、YES 或 DOUBLE 一起指定,那么不会除去引号内的前导空格和尾部空格。
  • 对于 CHAR 和 NCHAR 数据,值 TRAINING 或 BOTH 将不会对尾部空格产生任何影响,因为该字符串将自动使用尾部空格进行重新填充。
TRUNCSTRING 或 TRUNCATE_STRING
系统如何处理超过其声明的存储大小的 CHAR 或 VARCHAR 字符串:
TRUE
系统会截断超过其声明的存储大小的字符串值。
FALSE
当字符串值超过其声明的存储器大小时,系统将返回错误。 这是缺省值。
Y2BASE
作为 100 年范围的开始的年份。 指定为 2 位数字的年份将从今年开始计算。 默认值为 2000。 当 DATESTYLE 设置为 Y2MD、MDY2、DMY2、MONDY2 或 DMONY2 时,必须指定此选项。
表 3. 选项
选项 缺省值 应用于装入 应用到卸载
Azure (无缺省值) Y Y
BOOLSTYLE 或 BOOLEAN_STYLE 1_0 Y Y
CARDINALITY (无缺省值) Y Y
CCSID (无缺省值) Y Y
COMPRESS Y Y
CRINSTRING FALSE Y Y
CTRLCHARS FALSE 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
定界符 '|' Y Y
ENCODING INTERNAL Y 1
ESCAPECHAR 或 ESCAPE_CHARACTER (无缺省值) Y Y
FILLRECORD FALSE Y N
FORMAT 或 FILE_FORMAT 文本 Y Y
IGNOREZERO 或 TRIM_NULLS FALSE Y N
INCLUDEHEADER 或 COLUMN_NAMES FALSE N Y
INCLUDEZEROSECONDS FALSE Y Y
INCLUDEHIDDEN FALSE Y N
LFINSTRING FALSE 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 FALSE Y Y
NULLVALUE 或 NULL_VALUE "NULL" Y Y
PARTITION (无缺省值) Y Y
QUOTEDNULL TRUE Y N
QUOTEDVALUE Y N
RECORDDELIM 或 RECORD_DELIMITER "\n" Y N
REMOTESOURCE LOCAL Y Y
REQUIREQUOTES FALSE Y N
SKIPROWS 或 SKIP_ROWS 0 Y N
SOCKETBUFSIZE 8 MB Y Y
STRICTNUMERIC FALSE Y N
SWIFT (无缺省值) Y Y
S3 (无缺省值) Y Y
TIMEDELIM ':' Y Y
TIMEROUNDNANOS 或 TIMEEXTRASEZEROS FALSE 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 FALSE Y N
Y2BASE 2,000 美元 Y N
1 仅适用于值 INTERNAL、UTF8 和 LATIN9。
AS SELECT STATEMENT
指定对于全查询的派生结果表中的每一列,将为该表定义相应的列并使用查询的结果进行填充。 定义的每一列将沿用结果表相应列的以下属性(如果适用于该数据类型):
  • 列名
  • 列描述
  • 数据类型、长度、精度和小数位
  • 可空性

注意

  • 无法处理的记录(如果有)将写入具有以下格式的名称的文件中:
    <database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.bad
    错误记录在具有以下格式的名称的文件中:
    <database>.<schema>.<external-table-name>.<file-name>.<application-handle>.<id>.log
    这些文件位于由 LOGDIR 或 ERROR_LOG 选项指定的目录中。

    对于对分区执行的操作,生成的 .bad 或 .log 文件的名称以句点为后缀,后跟 3 位分区号。

  • 要创建、插入或删除已命名的外部表,请发出 CREATE、INSERT 或 DROP 语句。 不能在瞬态外部表中插入或删除该表。
  • 删除外部表将删除该表定义,但不会删除与该表关联的数据文件。

限制

  • 远程外部表限制:
    • 例程中不允许此值
    • 不允许使用 LOAD CURSOR
    • 对于远程外部表 (即,对于外部表,不在 Swift 或 S3 对象库中,并且 REMOTESOURCE 选项设置为 LOCAL 以外的值):
      注: 单个查询或子查询一次不能从多个外部表中进行选择,并且不能多次引用同一个外部表。 如果需要,请将多个外部表中的数据合并到单个表中,并在查询中使用该表。

      此外,联合操作不能涉及多个外部表。

  • 只能通过在操作系统中定义的用户标识来查询外部表。
  • 外部表不能由在 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 ',');