MaxCompute支持您在项目中创建OSS(Object Storage Service)外部表,与存储服务OSS上的目录建立映射关系,您可以通过OSS外部表访问OSS目录下的数据文件中的非结构化数据,或将MaxCompute项目中的数据写入OSS目录。本文为您介绍创建OSS外部表的语法、参数信息并提供示例。

背景信息

对象存储服务OSS是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的数据文件。当您需要使用MaxCompute读取存储在OSS目录中的数据或需要将MaxCompute项目中的数据写入OSS目录时,可以在MaxCompute项目中创建OSS外部表建立与目录的映射关系。

OSS外部表包含分区表和非分区表两种类型,实际需要创建哪种类型的表,主要取决于OSS中数据文件的存储路径格式。当数据文件以分区路径方式存储时,需要创建分区表;否则创建非分区表。更多读取分区数据信息,请参见读取以分区方式存储的OSS数据

前提条件

在创建OSS外部表前,请确认执行操作的账号已满足如下条件:
  • 已授予访问OSS的权限。

    更多授权信息,请参见OSS的STS模式授权

  • 已具备在MaxCompute项目中创建表(CreateTable)的权限。

    更多表操作权限信息,请参见MaxCompute权限

注意事项

在使用OSS外部表时,您需要注意:
  • 对于不同格式的数据文件,创建OSS外部表语句仅个别参数设置有出入,请您仔细阅读创建OSS外部表语法及参数说明,确保创建符合实际业务需求的外部表,否则读取OSS数据或将数据写入OSS操作会执行失败。
  • OSS外部表只是记录与OSS目录的映射关系。当删除OSS外部表时,不会删除映射的OSS目录下的数据文件。
  • 如果OSS数据文件类型为归档文件,需要先解冻文件。更多解冻操作,请参见解冻文件

操作入口

MaxCompute支持您在如下平台创建OSS外部表。
创建方式平台
基于MaxCompute SQL创建OSS外部表MaxCompute客户端
使用控制台(查询编辑器)连接
DataWorks控制台-ODPS SQL节点
MaxCompute Studio-SQL程序
以可视化方式创建OSS外部表MaxCompute Studio-SQL程序
DataWorks控制台-外部表

创建OSS外部表语法

创建OSS外部表的场景及相应语法格式如下。详细语法参数及属性列表信息,请参见参考:语法参数说明参考:with serdeproperties属性列表参考:tblproperties属性列表

场景语法格式支持读取或写入OSS的数据文件格式
通过内置文本数据解析器创建外部表
create external table [if not exists] <mc_oss_extable_name> 
(
<col_name> <data_type>,
...
)
[partitioned by (<col_name> <data_type>, ...)] 
stored by '<StorageHandler>'  
with serdeproperties (
 ['<property_name>'='<property_value>',...]
) 
location '<oss_location>';
  • CSV
  • 以GZIP方式压缩的CSV
  • TSV
  • 以GZIP方式压缩的TSV
通过内置开源数据解析器创建外部表
create external table [if not exists] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[partitioned by (<col_name> <data_type>, ...)]
[row format serde '<serde_class>'
  [with serdeproperties (
    ['<property_name>'='<property_value>',...])
]
stored as <file_format> 
location '<oss_location>' 
[using '<resource_name>']
[tblproperties ('<tbproperty_name>'='<tbproperty_value>',...)];
  • PARQUET
  • 以SNAPPY、GZIP或LZO方式压缩的PARQUET
  • TEXTFILE(JSON、TEXT)
  • 以SNAPPY、LZO、BZ2、GZ、DEFLATE方式压缩的TEXTFILE
  • ORC
  • 以SNAPPY、ZLIB方式压缩的ORC
  • AVRO
  • SEQUENCEFILE
通过自定义解析器创建外部表
create external table [if not exists] <mc_oss_extable_name> 
(
<col_name> <date_type>,
...
)
[partitioned by (<col_name> <data_type>, ...)] 
stored by '<StorageHandler>' 
with serdeproperties (
 ['<property_name>'='<property_value>',...]
) 
location '<oss_location>' 
using '<jar_name>';
除上述格式外的数据文件。
说明 如果您创建的OSS外部表为分区表时,需要再执行msckalter命令后才可以使用,详情请参见补全OSS外部表分区数据语法

补全OSS外部表分区数据语法

当您创建的OSS外部表为分区表时,需要额外执行引入分区数据的操作。MaxCompute会根据您创建OSS外部表时指定的目录,自动补全OSS外部表的分区数据。语法格式如下。
  • (推荐)格式一:执行如下命令后,MaxCompute会自动解析OSS目录结构,识别分区,为OSS外部表添加分区信息。
    msck repair table <mc_oss_extable_name> add partitions [ with properties (key:value, key: value ...)];
  • 格式二:手动执行如下命令为OSS外部表添加分区信息。
    alter table <mc_oss_extable_name> add partition (<col_name>=<col_value>) [add partition (<col_name>=<col_value>) ...];
    col_namecol_value的值需要与分区数据文件所在目录名称对齐。假设,分区数据文件所在的OSS目录结构如下图,col_name对应directioncol_value对应N、NE、S、SW、W。一个add partition对应一个子目录,多个OSS子目录需要使用多个add partition分区路径
  • 示例
    1. 在OSS上创建目录demo8并分别在下面建立两个分区文件夹,分别放入对应的文件。
      • 分区文件夹:$pt1=1/$pt2=2,文件名称:demo8-pt1.txt
      • 分区文件夹:$pt1=3/$pt2=4,文件名称:demo8-pt2.txt
    2. 创建外部表并指定pt字段。
      --创建外部表
      create external table mf_oss_spe_pt (id int, name string)
      partitioned by (pt1 string, pt2 string)
      stored as TEXTFILE
      location "oss://oss-cn-beijing-internal.aliyuncs.com/mfoss*******/demo8/";
      
      --指定分区字段
      MSCK REPAIR TABLE  mf_oss_spe_pt ADD PARTITIONS
      with PROPERTIES ('odps.msck.partition.column.mapping'='pt1:$pt1,pt2:$pt2');
      
      --查询数据
      select * from mf_oss_spe_pt where pt1=1 and pt2=2;
      --返回
      +------------+------------+------------+------------+
      | id         | name       | pt1        | pt2        |
      +------------+------------+------------+------------+
      | 1          | kyle       | 1          | 2          |
      | 2          | nicole     | 1          | 2          |
      +------------+------------+------------+------------+
      --查询数据
      select * from mf_oss_spe_pt where pt1=3 and pt2=4;
      +------------+------------+------------+------------+
      | id         | name       | pt1        | pt2        |
      +------------+------------+------------+------------+
      | 3          | john       | 3          | 4          |
      | 4          | lily       | 3          | 4          |
      +------------+------------+------------+------------+
      
                                      

示例:数据准备

为便于理解,为您提供示例数据如下:
  • oss_endpointoss-cn-hangzhou-internal.aliyuncs.com,即华东1(杭州)。
  • Bucket名称oss-mc-test
  • 目录名称Demo1/Demo2/Demo3/SampleData/
    上述四个目录下分别上传以下数据文件:
    • Demo1/目录下上传的文件为vehicle.csv,用于和通过内置文本数据解析器创建的非分区表建立映射关系。文件中包含的数据信息如下。
      1,1,51,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,2,13,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,3,48,1,46.81006,-92.08174,9/14/2014 0:00,NE
      1,4,30,1,46.81006,-92.08174,9/14/2014 0:00,W
      1,5,47,1,46.81006,-92.08174,9/14/2014 0:00,S
      1,6,9,1,46.81006,-92.08174,9/15/2014 0:00,S
      1,7,53,1,46.81006,-92.08174,9/15/2014 0:00,N
      1,8,63,1,46.81006,-92.08174,9/15/2014 0:00,SW
      1,9,4,1,46.81006,-92.08174,9/15/2014 0:00,NE
      1,10,31,1,46.81006,-92.08174,9/15/2014 0:00,N
    • Demo2/目录下包含五个子目录direction=N/direction=NE/direction=S/direction=SW/direction=W/,分别上传的文件为vehicle1.csv、vehicle2.csv、vehicle3.csv、vehicle4.csv和vehicle5.csv,用于和通过内置文本数据解析器创建的分区表建立映射关系。文件中包含的数据信息如下。
      --vehicle1.csv
      1,7,53,1,46.81006,-92.08174,9/15/2014 0:00
      1,10,31,1,46.81006,-92.08174,9/15/2014 0:00
      
      --vehicle2.csv
      1,2,13,1,46.81006,-92.08174,9/14/2014 0:00
      1,3,48,1,46.81006,-92.08174,9/14/2014 0:00
      1,9,4,1,46.81006,-92.08174,9/15/2014 0:00
      
      --vehicle3.csv
      1,6,9,1,46.81006,-92.08174,9/15/2014 0:00
      1,5,47,1,46.81006,-92.08174,9/14/2014 0:00
      1,6,9,1,46.81006,-92.08174,9/15/2014 0:00
      
      --vehicle4.csv
      1,8,63,1,46.81006,-92.08174,9/15/2014 0:00
      
      --vehicle5.csv
      1,4,30,1,46.81006,-92.08174,9/14/2014 0:00
      Demo2
    • Demo3/目录下上传的文件为vehicle.csv.gz,压缩包内文件为vehicle.csv,与Demo1/目录下的文件内容相同,用于和携带压缩属性的OSS外部表建立映射关系。压缩
    • SampleData/目录下上传的文件为vehicle6.csv,用于和通过开源数据解析器创建的OSS外部表建立映射关系。文件中包含的数据信息如下。
      1|1|51|1|46.81006|-92.08174|9/14/2014 0:00|S
      1|2|13|1|46.81006|-92.08174|9/14/2014 0:00|NE
      1|3|48|1|46.81006|-92.08174|9/14/2014 0:00|NE
      1|4|30|1|46.81006|-92.08174|9/14/2014 0:00|W
      1|5|47|1|46.81006|-92.08174|9/14/2014 0:00|S
      1|6|9|1|46.81006|-92.08174|9/14/2014 0:00|S
      1|7|53|1|46.81006|-92.08174|9/14/2014 0:00|N
      1|8|63|1|46.81006|-92.08174|9/14/2014 0:00|SW
      1|9|4|1|46.81006|-92.08174|9/14/2014 0:00|NE
      1|10|31|1|46.81006|-92.08174|9/14/2014 0:00|N

示例:通过内置文本数据解析器创建OSS外部表-非分区表

示例:数据准备中的Demo1/目录建立映射关系。创建OSS外部表命令示例如下。

create external table if not exists mc_oss_csv_external1
(
vehicleId int,
recordId int,
patientId int,
calls int,
locationLatitute double,
locationLongtitue double,
recordTime string,
direction string
)
stored by 'com.aliyun.odps.CsvStorageHandler' 
with serdeproperties (
 'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole'
) 
location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo1/';

您可以执行desc extended mc_oss_csv_external1;命令查看创建好的OSS外部表结构信息。

示例:通过内置文本数据解析器创建OSS外部表-分区表

示例:数据准备中的Demo2/目录建立映射关系。创建OSS外部表并引入分区数据命令示例如下。

create external table if not exists mc_oss_csv_external2
(
vehicleId int,
recordId int,
patientId int,
calls int,
locationLatitute double,
locationLongtitue double,
recordTime string
)
partitioned by (
direction string
)
stored by 'com.aliyun.odps.CsvStorageHandler' 
with serdeproperties (
 'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole'
) 
location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Demo2/';
--引入分区数据。
msck repair table mc_oss_csv_external2 add partitions;
--等效于如下语句。
alter table mc_oss_csv_external2 add partition (direction = 'N') partition (direction = 'NE') partition (direction = 'S') partition (direction = 'SW') partition (direction = 'W');

您可以执行desc extended mc_oss_csv_external2;命令查看创建好的外部表结构信息。

示例:通过内置文本数据解析器创建OSS外部表-压缩数据

示例:数据准备中的Demo3/目录建立映射关系。创建OSS外部表命令示例如下。

create external table if not exists mc_oss_csv_external3
(
vehicleId int,
recordId int,
patientId int,
calls int,
locationLatitute double,
locationLongtitue double,
recordTime string,
direction string
)
stored by 'com.aliyun.odps.CsvStorageHandler' 
with serdeproperties (
 '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/';

您可以执行desc extended mc_oss_csv_external3;命令查看创建好的外部表结构信息。

示例:通过内置开源数据解析器创建OSS外部表

  • 映射PARQUET数据文件
    create external table [if not exists] <mc_oss_extable_name>
    (
    <col_name> <data_type>,
    ...
    )
    [partitioned by (<col_name> <data_type>, ...)]
    stored as parquet  
    location '<oss_location>';
    select ... from <mc_oss_extable_name> ...;
  • 映射TEXTFILE数据文件
    • 关联TEXT数据建表示例
      create external table [if not exists] <mc_oss_extable_name>
      (
      <col_name> <data_type>,
      ...
      )
      [partitioned by (<col_name> <data_type>, ...)]
      row format serde 'org.apache.hive.hcatalog.data.JsonSerDe'
      stored as textfile
      location '<oss_location>';
      select ... from <mc_oss_extable_name> ...;
      建表时不支持自定义row formatrow format默认值如下。
      FIELDS TERMINATED BY :'\001'
      ESCAPED BY :'\'
      COLLECTION ITEMS TERMINATED BY :'\002'
      MAP KEYS TERMINATED BY :'\003'
      LINES TERMINATED BY :'\n'
      NULL DEFINED AS :'\N'
    • 关联CSV数据建表示例
      --关闭native的text reader。
      set odps.ext.hive.lazy.simple.serde.native=false;
      --创建OSS外部表。
      create external table <mc_oss_extable_name>
      (
      <col_name> <data_type>,
      ...
      )
      row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
      with serdeproperties (
      "separatorChar" = ",",
      "quoteChar"= '"',
      "escapeChar"= "\\"
      )
      stored as textfile
      location '<oss_location>'
      tblproperties (
      "skip.header.line.count"="1",
      "skip.footer.line.count"="1"
      );
      select ... from <mc_oss_extable_name> ...;
      说明 OpenCSVSerde只支持STRING类型。执行DML语句时,您需要在SQL语句前增加set odps.sql.hive.compatible=true;命令,与SQL语句一起提交执行。
    • 关联JSON数据建表示例
      create external table [if not exists] <mc_oss_extable_name>
      (
      <col_name> <data_type>,
      ...
      )
      [partitioned by (<col_name> <data_type>, ...)]
      row format serde 'org.apache.hive.hcatalog.data.JsonSerDe'
      stored as textfile
      location '<oss_location>';
      select ... from <mc_oss_extable_name> ...;
  • 映射ORC数据文件
    create external table [if not exists] <mc_oss_extable_name>
    (
    <col_name> <data_type>,
    ...
    )
    [partitioned by (<col_name> <data_type>, ...)]
    stored as orc
    location '<oss_location>';
    select ... from <mc_oss_extable_name> ...;
  • 映射AVRO数据文件
    create external table [if not exists] <mc_oss_extable_name>
    (
    <col_name> <data_type>,
    ...
    )
    [partitioned by (<col_name> <data_type>, ...)]
    stored as avro
    location '<oss_location>';
    select ... from <mc_oss_extable_name> ...;
  • 映射SEQUENCEFILE数据文件
    create external table [if not exists] <mc_oss_extable_name>
    (
    <col_name> <data_type>,
    ...
    )
    [partitioned by (<col_name> <data_type>, ...)]
    stored as sequencefile
    location '<oss_location>';
    select ... from <mc_oss_extable_name> ...;

示例:通过自定义解析器创建OSS外部表

示例:数据准备中的SampleData/目录建立映射关系。

操作流程如下:

  1. 使用MaxCompute Studio开发TextExtractor.java、TextOutputer.java、SplitReader.java和TextStorageHandler.java四个Java程序。
    更多开发Java程序信息,请参见开发UDF
  2. 通过MaxCompute Studio的一键式打包功能,将TextStorageHandler.java打包上传为MaxCompute资源。
    假设,此处打包的资源名称为javatest-1.0-SNAPSHOT.jar。更多打包上传信息,请参见打包、上传及注册
    说明 如果有多个依赖请分别打包后上传为MaxCompute资源。
  3. 执行如下命令创建OSS外部表。
    create external table if not exists ambulance_data_txt_external
    (
    vehicleId int,
    recordId int,
    patientId int,
    calls int,
    locationLatitute double,
    locationLongtitue double,
    recordTime string,
    direction string
    )
    stored by 'com.aliyun.odps.udf.example.text.TextStorageHandler' 
      with serdeproperties (
    'delimiter'='|',  
    'odps.properties.rolearn'='acs:ram::xxxxxxxxxxxxx:role/aliyunodpsdefaultrole'
    )
    location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/SampleData/'
    using 'javatest-1.0-SNAPSHOT.jar'; 

    其中delimeter是OSS数据的分隔符名称。

    您可以执行desc extended ambulance_data_txt_external;命令查看创建好的外部表结构信息。

    说明 对于自定义解析器,默认不会对数据分片,防止解析器出现正确性问题。如果您确认可以处理分片,需要使用如下命令允许进行数据分片,即启动多个mapper。
    set odps.sql.unstructured.data.single.file.split.enabled=true;

示例:通过自定义解析器创建OSS外部表-非文本数据

示例:数据准备中的SpeechSentence/目录建立映射关系。

操作流程如下:

  1. 使用MaxCompute Studio开发SpeechSentenceSnrExtractor.java、SpeechStorageHandler.java两个Java程序。
    更多开发Java程序信息,请参见开发UDF
  2. 通过MaxCompute Studio的一键式打包功能,将SpeechStorageHandler.java打包上传为MaxCompute资源。
    假设,此处打包的资源名称为speechtest-1.0-SNAPSHOT.jar。更多打包上传信息,请参见打包、上传及注册
  3. 执行如下命令创建OSS外部表。
    create external table if not exists speech_sentence_snr_external
    (
    sentence_snr double,
    id string
    )
    stored by 'com.aliyun.odps.udf.example.speech.SpeechStorageHandler'
    with serdeproperties (
        'odps.properties.rolearn'='acs:ram::xxxxxxxxxxxxx:role/aliyunodpsdefaultrole',   
        'mlfFileName'='sm_random_5_utterance.text.label',
        'speechSampleRateInKHz' = '16'
    )
    location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/SpeechSentence/'
    using 'speechtest-1.0-SNAPSHOT.jar,sm_random_5_utterance.text.label';

    您可以执行desc extended speech_sentence_snr_external;命令查看创建好的外部表结构信息。

参考:语法参数说明

上述语法中各参数的含义如下。

参数名称可选/必填说明
mc_oss_extable_name必填待创建的OSS外部表的名称。

表名大小写不敏感,在查询外部表时,无需区分大小写,且不支持强制转换大小写。

col_name必填OSS外部表的列名称。

在读取OSS数据场景,创建的OSS外部表结构必须与OSS数据文件结构保持一致,否则无法成功读取OSS数据。

data_type必填OSS外部表的列数据类型。

在读取OSS数据场景,创建的OSS外部表各列数据类型必须与OSS数据文件各列数据类型保持一致,否则无法成功读取OSS数据。

partitioned by (<col_name> <data_type>, ...)条件必填当OSS中的数据文件是以分区路径方式存储时,需要携带该参数,创建分区表。
  • col_name:分区列名称。
  • data_type:分区列数据类型。
StorageHandler条件必填当您使用内置文本数据解析器或自定义解析器创建OSS外部表时,需要携带该参数。MaxCompute解析器主要分为如下两类:
  • 内置文本数据解析器:
    • com.aliyun.odps.CsvStorageHandler:读写CSV或以GZIP方式压缩的CSV数据文件。
    • com.aliyun.odps.TsvStorageHandler:读写TSV或以GZIP方式压缩的TSV数据文件。
  • 自定义解析器:您通过编写MaxCompute UDF自定义的解析器。更多编写MaxCompute UDF信息,请参见开发UDF
'<property_name>'='<property_value>'必填OSS外部表扩展属性。详细属性列表,请参见参考:with serdeproperties属性列表
oss_location必填数据文件所在OSS路径。格式为oss://<oss_endpoint>/<Bucket名称>/<OSS目录名称>/。MaxCompute默认会读取该路径下的所有数据文件。
  • oss_endpoint:OSS访问域名信息。建议您使用OSS提供的内网域名,否则将产生OSS流量费用。更多OSS内网域名信息,请参见访问域名和数据中心
    说明 建议数据文件存放的OSS地域与MaxCompute项目所在地域保持一致。由于MaxCompute只在部分地域部署,跨地域的数据连通性可能存在问题。
  • Bucket名称:OSS存储空间名称,即Bucket名称。更多查看存储空间名称信息,请参见列举存储空间
  • 目录名称:OSS目录名称。目录后不需要指定文件名。
    --正确用法。
    oss://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/
    --错误用法。
    http://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/                -- 不支持HTTP连接。
    https://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/               -- 不支持HTTPS连接。
    oss://oss-cn-shanghai-internal.aliyuncs.com/Demo1                              -- 连接地址错误。
    oss://oss-cn-shanghai-internal.aliyuncs.com/oss-mc-test/Demo1/vehicle.csv     -- 不需要指定文件名。
jar_name条件必填当您使用自定义解析器创建OSS外部表时,需要携带该参数。指定自定义解析器代码对应的JAR包。该JAR包需要添加为MaxCompute项目资源。

更多添加资源信息,请参见添加资源

serde_class条件可选指定MaxCompute内置的开源数据解析器。如果数据文件格式为TEXTFILE,必须携带该参数,其他场景可以不配置。
MaxCompute支持的开源数据格式对应的serde_class如下:
  • PARQUET:org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
  • TEXTFILE:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDeorg.apache.hive.hcatalog.data.JsonSerDeorg.apache.hadoop.hive.serde2.OpenCSVSerde
  • ORC:org.apache.hadoop.hive.ql.io.orc.OrcSerde
  • AVRO:org.apache.hadoop.hive.serde2.avro.AvroSerDe
  • SEQUENCEFILE:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
  • RCFILE:org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe
  • ORCFILE:org.apache.hadoop.hive.ql.io.orc.OrcSerde
file_format条件必填当OSS数据文件为开源格式时,需要携带该参数。指定OSS数据文件的格式。
说明 单个文件大小不能超过3 GB,如果文件过大,建议拆分。
resource_name条件可选当您使用自定义的serde class时,需要指定依赖的资源。资源中包含了自定义的serde class

serde class相关的JAR包需要添加为MaxCompute项目资源。

更多添加资源信息,请参见添加资源

'<tbproperty_name>'='<tbproperty_value>'条件可选OSS外部表扩展属性。详细属性列表,请参见参考:tblproperties属性列表

参考:with serdeproperties属性列表

property_name使用场景说明property_value默认值
odps.properties.rolearn使用STS模式授权时,请添加该属性。指定RAM中Role(具有访问OSS权限)的ARN信息。您可以通过RAM控制台中的角色详情获取。
delimiter需要明确CSV或TSV数据文件的列分隔符时,请添加该属性。MaxCompute基于设置的分隔符,正确读取OSS数据文件中的各列数据。单个字符英文逗号(,)
odps.text.option.gzip.input.enabled当需要读取以GZIP方式压缩的CSV或TSV文件数据时,请添加该属性。CSV、TSV压缩属性。配置该参数值为True时,MaxCompute才可以正常读取压缩文件,否则会读取失败。
  • True
  • False
False
odps.text.option.gzip.output.enabled当需要将数据以GZIP压缩方式写入OSS时,请添加该属性。CSV、TSV压缩属性。配置该参数值为True时,MaxCompute才能将数据以GZIP压缩方式写入OSS,否则不压缩。
  • True
  • False
False
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
  • False
True
odps.text.option.encoding当OSS数据文件为CSV或TSV,且OSS数据文件编码规则非默认编码规则时,请添加该属性。确保此处配置的编码规则与OSS数据文件编码规则保持一致,否则MaxCompute无法成功读取数据。
  • UTF-8
  • UTF-16
  • US-ASCII
  • GBK
UTF-8
odps.text.option.delimiter当需要明确CSV或TSV数据文件的列分隔符时,请添加该属性。确保此处配置的列分隔符可以正确读取OSS数据文件的每一列,否则MaxCompute读取的数据会出现错位问题。单个字符英文逗号(,)
odps.text.option.use.quote当CSV或TSV数据文件中的字段包含换行(CRLF)、双引号或英文逗号时,请添加该属性。当CSV某个字段中包含换行、双引号(需要在"前再加"转义)或英文逗号时,整个字段必须用双引号("")括起来作为列分隔符。该参数指定是否识别CSV的列分隔符"
  • True
  • False
False
mcfed.parquet.compression当需要将PARQUET数据以压缩方式写入OSS时,请添加该属性。PARQUET压缩属性。PARQUET数据默认不压缩。如果指定了压缩方式,请在创建OSS外部表语句前添加set odps.sql.hive.compatible=true;命令,与SQL语句一起提交。
  • SNAPPY
  • GZIP
parquet.file.cache.size在处理PARQUET数据场景,如果需要提升读OSS数据文件性能,请添加该属性。指定读OSS数据文件时,可缓存的数据量,单位为KB。1024
parquet.io.buffer.size在处理PARQUET数据场景,如果需要提升读OSS数据文件性能,请添加该属性。指定OSS数据文件大小超过1024 KB时,可缓存的数据量,单位为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

参考:tblproperties属性列表

property_name使用场景说明property_value默认值
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数据的压缩方式。如果指定了压缩方式,请在创建OSS外部表语句前添加set odps.sql.hive.compatible=true;命令,与SQL语句一起提交。
  • SNAPPY
  • ZLIB
mcfed.mapreduce.output.fileoutputformat.compress当需要将TEXTFILE数据文件以压缩方式写入OSS时,请添加该属性。TEXTFILE压缩属性。配置该参数值为True时,MaxCompute才可以将TEXTFILE数据文件以压缩方式写入OSS,否则不压缩。如果指定了压缩方式,请在创建OSS外部表语句前添加set odps.sql.hive.compatible=true;命令,与SQL语句一起提交。
  • True
  • False
False
mcfed.mapreduce.output.fileoutputformat.compress.codec当需要将TEXTFILE数据文件以压缩方式写入OSS时,请添加该属性。TEXTFILE压缩属性。设置TEXTFILE数据文件的压缩方式。如果指定了压缩方式,请在创建OSS外部表语句前添加set odps.sql.hive.compatible=true;命令,与SQL语句一起提交。
  • com.hadoop.compression.lzo.LzoCodec
  • com.hadoop.compression.lzo.LzopCodec
  • org.apache.hadoop.io.compress.SnappyCodec
  • com.aliyun.odps.io.compress.SnappyRawCodec
io.compression.codecs当OSS数据文件为Raw-Snappy格式时,请添加该属性。配置该参数值为True时,MaxCompute才可以正常读取压缩数据,否则MaxCompute无法成功读取数据。com.aliyun.odps.io.compress.SnappyRawCodec