在创建OSS外部表前,请确认执行操作的账号已满足如下条件:
在使用OSS外部表时,您需要注意:
OSS外部表不支持cluster属性。
MaxCompute支持您在如下平台创建OSS外部表。
创建方式
平台
基于MaxComputeSQL创建OSS外部表
以可视化方式创建OSS外部表
场景
语法格式
支持读取或写入OSS的数据文件格式
示例
通过内置文本数据解析器创建外部表
CREATEEXTERNALTABLE[IFNOTEXISTS]
CREATEEXTERNALTABLE[IFNOTEXISTS]
通过自定义解析器创建外部表
CREATEEXTERNALTABLE[IFNOTEXISTS]
当您创建的OSS外部表为分区表时,需要额外执行引入分区数据的操作。
为便于理解,为您提供示例数据如下:
createexternaltableifnotexistsmc_oss_csv_external1(vehicleIdint,recordIdint,patientIdint,callsint,locationLatitutedouble,locationLongtituedouble,recordTimestring,directionstring)storedby'com.aliyun.odps.CsvStorageHandler'withserdeproperties('odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole')location'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo1/';您可以执行descextendedmc_oss_csv_external1;命令查看创建好的OSS外部表结构信息。
createexternaltableifnotexistsmc_oss_csv_external2(vehicleIdint,recordIdint,patientIdint,callsint,locationLatitutedouble,locationLongtituedouble,recordTimestring)partitionedby(directionstring)storedby'com.aliyun.odps.CsvStorageHandler'withserdeproperties('odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole')location'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo2/';--引入分区数据。msckrepairtablemc_oss_csv_external2addpartitions;--等效于如下语句。altertablemc_oss_csv_external2addpartition(direction='N')partition(direction='NE')partition(direction='S')partition(direction='SW')partition(direction='W');您可以执行descextendedmc_oss_csv_external2;命令查看创建好的外部表结构信息。
createexternaltableifnotexistsmc_oss_csv_external3(vehicleIdint,recordIdint,patientIdint,callsint,locationLatitutedouble,locationLongtituedouble,recordTimestring,directionstring)storedby'com.aliyun.odps.CsvStorageHandler'withserdeproperties('odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole','odps.text.option.gzip.input.enabled'='true','odps.text.option.gzip.output.enabled'='true')location'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo3/';您可以执行descextendedmc_oss_csv_external3;命令查看创建好的外部表结构信息。
操作流程如下:
上述语法中各参数的含义如下。
参数名称
可选/必填
说明
mc_oss_extable_name
必填
待创建的OSS外部表的名称。
表名大小写不敏感,在查询外部表时,无需区分大小写,且不支持强制转换大小写。
col_name
OSS外部表的列名称。
在读取OSS数据场景,创建的OSS外部表结构必须与OSS数据文件结构保持一致,否则无法成功读取OSS数据。
data_type
OSS外部表的列数据类型。
在读取OSS数据场景,创建的OSS外部表各列数据类型必须与OSS数据文件各列数据类型保持一致,否则无法成功读取OSS数据。
partitionedby(
条件必填
当OSS中的数据文件是以分区路径方式存储时,需要携带该参数,创建分区表。
StorageHandler
当您使用内置文本数据解析器或自定义解析器创建OSS外部表时,需要携带该参数。MaxCompute解析器主要分为如下两类:
'
oss_location
数据文件所在OSS路径。格式为oss://
jar_name
当您使用自定义解析器创建OSS外部表时,需要携带该参数。指定自定义解析器代码对应的JAR包。该JAR包需要添加为MaxCompute项目资源。
serde_class
条件可选
指定MaxCompute内置的开源数据解析器。如果数据文件格式为TEXTFILE,必须携带该参数,其他场景可以不配置。
MaxCompute支持的开源数据格式对应的serde_class如下:
file_format
当OSS数据文件为开源格式时,需要携带该参数,以指定OSS数据文件的格式。
单个文件大小不能超过3GB,如果文件过大,建议拆分。
resource_name
当您使用自定义的serdeclass时,需要指定依赖的资源。资源中包含了自定义的serdeclass。
'
property_name
使用场景
property_value
默认值
odps.properties.rolearn
指定RAM中Role(具有访问OSS权限)的ARN信息。
无
odps.text.option.gzip.input.enabled
当需要读取以GZIP方式压缩的CSV或TSV文件数据时,请添加该属性。
CSV、TSV压缩属性。配置该参数值为True时,MaxCompute才可以正常读取压缩文件,否则会读取失败。
False
odps.text.option.gzip.output.enabled
当需要将数据以GZIP压缩方式写入OSS时,请添加该属性。
CSV、TSV压缩属性。配置该参数值为True时,MaxCompute才能将数据以GZIP压缩方式写入OSS,否则不压缩。
odps.text.option.header.lines.count
当OSS数据文件为CSV或TSV,且需要忽略OSS数据文件中的前N行时,请添加该属性。
MaxCompute读取OSS数据文件时,会忽略指定的行数。
非负整数
0
odps.text.option.null.indicator
当OSS数据文件为CSV或TSV,且需要定义OSS数据文件中NULL的解析规则时,请添加该属性。
通过该参数配置的字符串会被解析为SQL中的NULL。例如\N指代NULL,则a,\N,b会解析为a,NULL,b。
字符串
空字符串
odps.text.option.ignore.empty.lines
当OSS数据文件为CSV或TSV,且需要定义OSS数据文件中空行的处理规则时,请添加该属性。
配置该参数值为True时,MaxCompute会忽略数据文件中的空行,否则会读取空行。
True
odps.text.option.encoding
当OSS数据文件为CSV或TSV,且OSS数据文件编码规则非默认编码规则时,请添加该属性。
确保此处配置的编码规则与OSS数据文件编码规则保持一致,否则MaxCompute无法成功读取数据。
UTF-8
odps.text.option.delimiter
当需要明确CSV或TSV数据文件的列分隔符时,请添加该属性。
确保此处配置的列分隔符可以正确读取OSS数据文件的每一列,否则MaxCompute读取的数据会出现错位问题。
单个字符
英文逗号(,)
odps.text.option.use.quote
当CSV或TSV数据文件中的字段包含换行(CRLF)、双引号或英文逗号时,请添加该属性。
当CSV某个字段中包含换行、双引号(需要在"前再加"转义)或英文逗号时,整个字段必须用双引号("")括起来作为列分隔符。该参数指定是否识别CSV的列分隔符"。
mcfed.parquet.compression
当需要将PARQUET数据以压缩方式写入OSS时,请添加该属性。
PARQUET压缩属性。PARQUET数据默认不压缩。
mcfed.parquet.compression.codec.zstd.level
当'mcfed.parquet.compression'='zstd'时,可以添加该属性。不填此属性时,以默认值3进行压缩。
取值范围为1~22。
3
parquet.file.cache.size
在处理PARQUET数据场景,如果需要提升读OSS数据文件性能,请添加该属性。
指定读OSS数据文件时,可缓存的数据量,单位为KB。
1024
parquet.io.buffer.size
指定OSS数据文件大小超过1024KB时,可缓存的数据量,单位为KB。
4096
separatorChar
当需要明确以TEXTFILE格式保存的CSV数据的列分隔符时,请添加该属性。
指定CSV数据列分隔符。
单个字符串
quoteChar
当以TEXTFILE格式保存的CSV数据中的字段包含换行、双引号或英文逗号时,请添加该属性。
指定CSV数据的引用符。
escapeChar
当需要明确以TEXTFILE格式保存的CSV数据的转义规则时,请添加该属性。
指定CSV数据的转义符。
mcfed.orc.schema.resolution
同一张OSS外部表中数据的Schema不一样。
用于设置ORC文件解析方式,name表示根据列名解析。
name
默认按列号解析,等价于:'mcfed.orc.schema.resolution'='position'。
odps.sql.text.option.flush.header
在往OSS写数据的时候,文件块的第一行为表头。
只有针对CSV文件格式生效。
odps.sql.text.schema.mismatch.mode
当读取的OSS文件的数据列数和外部表的Schema列数不一致时。
指定对于列数不一致行的处理方式。
odps.text.option.use.quote参数值为True时,该功能不生效。
error
skip.header.line.count
当需要忽略以TEXTFILE格式保存的CSV文件中的前N行数据时,请添加该属性。
MaxCompute读取OSS数据时,会忽略从首行开始指定行数的数据。
skip.footer.line.count
当需要忽略以TEXTFILE格式保存的CSV文件中的后N行数据时,请添加该属性。
MaxCompute读取OSS数据时,会忽略从尾行开始指定行数的数据。
mcfed.orc.compress
当需要将ORC数据以压缩方式写入OSS时,请添加该属性。
ORC压缩属性。指定ORC数据的压缩方式。
mcfed.mapreduce.output.fileoutputformat.compress
当需要将TEXTFILE数据文件以压缩方式写入OSS时,请添加该属性。
TEXTFILE压缩属性。配置该参数值为True时,MaxCompute才可以将TEXTFILE数据文件以压缩方式写入OSS,否则不压缩。
mcfed.mapreduce.output.fileoutputformat.compress.codec
TEXTFILE压缩属性。设置TEXTFILE数据文件的压缩方式。
只支持property_value中的四种压缩方式。
io.compression.codecs
当OSS数据文件为Raw-Snappy格式时,请添加该属性。
配置该参数值为True时,MaxCompute才可以正常读取压缩数据,否则MaxCompute无法成功读取数据。