华为云用户手册

  • 示例 右外连接和左外连接相似,但是会将右边表(这里的course_info)中的所有记录返回,没有匹配值的左表记录将返回NULL。 1 2 SELECT student_info.name, course_info.courseName FROM student_info RIGHT OUTER JOIN course_info ON (student_info.courseId = course_info.courseId);
  • 示例 左外连接时利用student_info表中的courseId与course_info中的courseId进行匹配,返回已经选课的学生姓名及所选的课程名称,没有匹配值的右表记录将返回NULL。 1 2 SELECT student_info.name, course_info.courseName FROM student_info LEFT OUTER JOIN course_info ON (student_info.courseId = course_info.courseId);
  • 示例 通过将student_info与course_info两张表中的课程编号匹配建立JOIN连接,来查看学生姓名及所选课程名称。 1 2 SELECT student_info.name, course_info.courseName FROM student_info JOIN course_info ON (student_info.courseId = course_info.courseId);
  • 关键字 GROUPING SETS:为对GROUP BY的扩展,例如 SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b)); 将转换为以下一条查询: 1 2 SELECT a, b, sum(expression) FROM table GROUP BY a, b; SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS(a,b); 将转换为以下两条查询: 1 2 3 SELECT a, NULL, sum(expression) FROM table GROUP BY a; UNION SELECT NULL, b, sum(expression) FROM table GROUP BY b; SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b), a); 将转换为以下两条查询: 1 2 3 SELECT a, b, sum(expression) FROM table GROUP BY a, b; UNION SELECT a, NULL, sum(expression) FROM table GROUP BY a; SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b), a, b, ()); 将转换为以下四条查询: 1 2 3 4 5 6 7 SELECT a, b, sum(expression) FROM table GROUP BY a, b; UNION SELECT a, NULL, sum(expression) FROM table GROUP BY a, NULL; UNION SELECT NULL, b, sum(expression) FROM table GROUP BY NULL, b; UNION SELECT NULL, NULL, sum(expression) FROM table;
  • 关键字 ROLLUP:为GROUP BY的扩展,例如:SELECT a, b, c, SUM(expression) FROM table GROUP BY a, b, c WITH ROLLUP;将转换成以下四条查询: (a, b, c)组合小计 1 2 SELECT a, b, c, sum(expression) FROM table GROUP BY a, b, c; (a, b)组合小计 1 2 SELECT a, b, NULL, sum(expression) FROM table GROUP BY a, b; (a)组合小计 1 2 SELECT a, NULL, NULL, sum(expression) FROM table GROUP BY a; 总计 1 SELECT NULL, NULL, NULL, sum(expression) FROM table;
  • 关键字 GROUP BY:按列可分为单列GROUP BY与多列GROUP BY。 单列GROUP BY:指GROUP BY子句中仅包含一列,col_name_list中包含的字段必须出现在attr_expr_list的字段内,attr_expr_list中可以使用多个聚合函数,比如count(),sum(),聚合函数中可以包含其他字段。 多列GROUP BY:指GROUP BY子句中不止一列,查询语句将按照GROUP BY的所有字段分组,所有字段都相同的记录将被放在同一组中,同样,GROUP BY中出现的字段必须在attr_expr_list的字段内,attr_expr_list也可以使用聚合函数。
  • 语法格式 1 2 3 4 5 6 7 SELECT [ALL | DISTINCT] attr_expr_list FROM table_reference [WHERE where_condition] [GROUP BY col_name_list] [ORDER BY col_name_list][ASC | DESC] [CLUSTER BY col_name_list | DISTRIBUTE BY col_name_list] [SORT BY col_name_list]] [LIMIT number];
  • 关键字 表1 SELECT关键字说明 参数 描述 ALL ALL关键字用于返回数据库所有匹配的行,包括重复的行。ALL关键字的后面只能跟*,否则执行语句会出错。 ALL是SQL语句的默认行为,通常不会被明确写出,如果不指定ALL或DISTINCT,查询结果将包含所有的行,即使是重复的行数据也将被返回。 DISTINCT 在SELECT语句中使用DISTINCT关键字时,系统会在查询结果中去除重复的数据,确保结果的唯一性。 WHERE 指定查询的过滤条件,支持算术运算符、关系运算符和逻辑运算符。 where_condition 过滤条件。 GROUP BY 指定分组的字段,支持单字段及多字段分组。 col_name_list 字段列表。 ORDER BY 对查询结果进行排序。 ASC/DESC ASC为升序,DESC为降序,默认为ASC。 CLUSTER BY 为分桶且排序,按照分桶字段先进行分桶,再在每个桶中依据该字段进行排序,即当DISTRIBUTE BY的字段与SORT BY的字段相同且排序为降序时,两者的作用与CLUSTER BY等效。 DISTRIBUTE BY 指定分桶字段,不进行排序。 SORT BY 将会在桶内进行排序。 LIMIT 对查询结果进行限制,number参数仅支持INT类型。
  • 示例 回收用户user_name1对于数据库db1的删除数据库权限。 1 REVOKE DROP_DATABASE ON databases.db1 FROM USER user_name1; 回收用户user_name1对于数据库db1的表tb1的SELECT权限。 1 REVOKE SELECT ON databases.db1.tables.tb1 FROM USER user_name1; 回收角色role_name对于数据库db1的表tb1的SELECT权限。 1 REVOKE SELECT ON databases.db1.tables.tb1 FROM ROLE role_name;
  • 注意事项 privilege必须为赋权对象在resource中的已授权限,否则会回收失败。Privilege支持的权限类型可参见数据权限列表。 resource可以是queue、database、table、view、column,格式分别为: queue的格式为:queues.queue_name database的格式为:databases.db_name table的格式为:databases.db_name.tables.table_name view的格式为:databases.db_name.tables.view_name column的格式为:databases.db_name.tables.table_name.columns.column_name
  • 注意事项 resource可以是queue、database、table、column、view,格式分别为: queue的格式为:queues.queue_name database的格式为:databases.db_name table的格式为:databases.db_name.tables.table_name column的格式为:databases.db_name.tables.table_name.columns.column_name view的格式为:databases.db_name.tables.view_name
  • 示例 给用户user_name1授予数据库db1的删除数据库权限。 1 GRANT DROP_DATABASE ON databases.db1 TO USER user_name1; 给用户user_name1授予数据库db1的表tb1的SELECT权限。 1 GRANT SELECT ON databases.db1.tables.tb1 TO USER user_name1; 给角色role_name授予数据库db1的表tb1的SELECT权限。 1 GRANT SELECT ON databases.db1.tables.tb1 TO ROLE role_name;
  • 注意事项 privilege必须是可授权限中的一种。且如果赋权对象在resource或上一级resource上已经有对应权限时,则会赋权失败。Privilege支持的权限类型可参见数据权限列表。 resource可以是queue、database、table、view、column,格式分别为: queue的格式为:queues.queue_name queue支持的Privilege权限类型可以参考下表: 操作 说明 DROP_QUEUE 删除队列 SUBMIT_JOB 提交作业 CANCEL_JOB 终止作业 RESTART 重启队列 SCALE_QUEUE 扩缩容队列 GRANT_PRIVILEGE 队列的赋权 REVOKE_PRIVILEGE 队列权限的回收 SHOW_PRIVILEGES 查看其他用户具备的队列权限 database的格式为:databases.db_name database支持的Privilege权限类型可参见数据权限列表。 table的格式为:databases.db_name.tables.table_name table支持的Privilege权限类型可参见数据权限列表。 view的格式为:databases.db_name.tables.view_name view支持的Privilege权限类型和table一样,具体可以参考数据权限列表中table的权限列表描述。 column的格式为:databases.db_name.tables.table_name.columns.column_name column支持的Privilege权限类型仅为:SELECT
  • 数据权限列表 DLI 中SQL语句与数据库、表、角色相关的权限矩阵如表1所示。 表1 权限矩阵 分类 SQL语句 权限 说明 Database DROP DATABASE db1 database.db1的DROP_DATABASE权限 - CREATE TABLE tb1(...) database.db1的CREATE_TABLE权限 - CREATE VIEW v1 database.db1的CREATE_VIEW权限 - EXPLAIN query database.db1的EXPLAIN权限 query需要其相应的权限。 Table SHOW CREATE TABLE tb1 database.db1.tables.tb1的SHOW_CREATE_TABLE权限 - DESCRIBE [EXTENDED|FORMATTED] tb1 databases.db1.tables.tb1的DESCRIBE_TABLE权限 - DROP TABLE [IF EXISTS] tb1 database.db1.tables.tb1的DROP_TABLE权限 - SELECT * FROM tb1 database.db1.tables.tb1的SELECT权限 - SELECT count(*) FROM tb1 database.db1.tables.tb1的SELECT权限 - SELECT * FROM view1 database.db1.tables.view1的SELECT权限 - SELECT count(*) FROM view1 database.db1.tables.view1的SELECT权限 - LOAD DLI TABLE database.db1.tables.tb1的INSERT_INTO_TABLE权限 - INSERT INTO TABLE database.db1.tables.tb1的INSERT_INTO_TABLE权限 - INSERT OVERWRITE TABLE database.db1.tables.tb1的INSERT_OVERWRITE_TABLE权限 - ALTER TABLE ADD COLUMNS database.db1.tables.tb1的ALTER_TABLE_ADD_COLUMNS权限 - ALTER TABLE RENAME database.db1.tables.tb1的ALTER_TABLE_RENAME权限 - ROLE&PRIVILEGE CREATE ROLE db的CREATE_ROLE权限 - DROP ROLE db的DROP_ROLE权限 - SHOW ROLES db的SHOW_ROLES权限 - GRANT ROLES db的GRANT_ROLE权限 - REVOKE ROLES db的REVOKE_ROLE权限 - GRANT PRIVILEGE db或table的GRANT_PRIVILEGE权限 - REVOKE PRIVILEGE db或table的REVOKE_PRIVILEGE权限 - SHOW GRANT db或table的SHOW_GRANT权限 - Privilege在进行数据库和表赋权或回收权限时,DLI支持的权限类型如下所示。 DATABASE上可赋权/回收的权限: DROP_DATABASE(删除数据库) CREATE_TABLE(创建表) CREATE_VIEW(创建视图) EXPLAIN(将SQL语句解释为执行计划) CREATE_ROLE(创建角色) DROP_ROLE(删除角色) SHOW_ROLES(显示角色) GRANT_ROLE(绑定角色) REVOKE_ROLE(解除角色绑定) DESCRIBE_TABLE(描述表) DROP_TABLE(删除表) SELECT(查询表) INSERT_INTO_TABLE(插入) INSERT_OVERWRITE_TABLE(重写) GRANT_PRIVILEGE(数据库的赋权) REVOKE_PRIVILEGE(数据库权限的回收) SHOW_PRIVILEGES(查看其他用户具备的数据库权限) ALTER_TABLE_ADD_PARTITION(在分区表中添加分区) ALTER_TABLE_DROP_PARTITION(删除分区表的分区) ALTER_TABLE_RENAME_PARTITION(重命名表分区) ALTER_TABLE_RECOVER_PARTITION(恢复表分区) ALTER_TABLE_SET_LOCATION(设置分区的路径) SHOW_PARTITIONS(显示所有分区) SHOW_CREATE_TABLE(查看建表语句) TABLE上可以赋权/回收的权限: DESCRIBE_TABLE(描述表) DROP_TABLE(删除表) SELECT(查询表) INSERT_INTO_TABLE(插入) INSERT_OVERWRITE_TABLE(重写) GRANT_PRIVILEGE(表的赋权) REVOKE_PRIVILEGE(表权限的回收) SHOW_PRIVILEGES(查看其他用户具备的表权限) ALTER_TABLE_ADD_COLUMNS(增加列) ALTER_TABLE_RENAME(重命名表) ALTER_TABLE_ADD_PARTITION(在分区表中添加分区) ALTER_TABLE_DROP_PARTITION(删除分区表的分区) ALTER_TABLE_RENAME_PARTITION(重命名表分区) ALTER_TABLE_RECOVER_PARTITION(恢复表分区) ALTER_TABLE_SET_LOCATION(设置分区的路径) SHOW_PARTITIONS(显示所有分区) SHOW_CREATE_TABLE(查看建表语句) 父主题: 数据权限相关
  • 关键字 表1 CREATE TABLE关键字描述 参数 描述 host OpenTSDB连接地址。 获取OpenTSDB连接地址需要先创建跨源连接,管理控制台操作请参考增强型跨源连接。 访问CloudTable OpenTSDB,填写OpenTSDB链接地址。 访问 MRS OpenTSDB,若使用增强型跨源连接,填写OpenTSDB所在节点IP与端口,格式为"IP:PORT",OpenTSDB存在多个节点时,用分号间隔。 metric 所创建的DLI表对应的OpenTSDB中的指标名称。 tags metric对应的标签,用于归类、过滤、快速检索等操作。可以是1个到8个,以“,”分隔,包括对应metric下所有tagk的值。
  • 注意事项 DLI表必须已经存在。 在“创建表关联HBase”章节创建的表中,OPTIONS里的Cols指定的列族如果不存在,insert into执行时会报错。 如果插入的(rowkey, 列族, 列)已存在,则执行插入操作时,会覆盖hbase中相同的(rowkey, 列族, 列)。 不建议对同一张表并发插入数据,因为有一定概率发生并发冲突,导致插入失败。 不支持INSERT OVERWRITE语法。
  • 语法格式 将SELECT查询结果插入到表中: 1 2 3 4 5 6 7 INSERT INTO DLI_TABLE SELECT field1,field2... [FROM DLI_TEST] [WHERE where_condition] [LIMIT num] [GROUP BY field] [ORDER BY field] ...; 将某条数据插入到表中: 1 2 INSERT INTO DLI_TABLE VALUES values_row [, values_row ...];
  • 参数说明 表1 参数描述 参数 描述 DLI_TABLE 已创建跨源连接的DLI表名称。 DLI_TEST 为包含待查询数据的表。 field1,field2...,field 表“DLI_TEST”中的列值,需要匹配表“DLI_TABLE”的列值和类型。 where_condition 查询过滤条件。 num 对查询结果进行限制,num参数仅支持INT类型。 values_row 想要插入到表中的值,列与列之间用逗号分隔。
  • 示例 1 2 3 4 5 6 7 8 9 CREATE TABLE test_hbase( ATTR1 int, ATTR2 int, ATTR3 string) using hbase OPTIONS ( 'ZKHost'='to-hbase-1174405101-CE1bDm5B.datasource.com:2181', 'TableName'='HBASE_TABLE', 'RowKey'='ATTR1', 'Cols'='ATTR2:CF1.C1, ATTR3:CF1.C2');
  • 关键字 表1 CREATE TABLE关键字说明 参数 描述 USING [CLOUDTABLE | HBASE] 指定hbase datasource,"CLOUDTABLE"或"HBASE"二选一,大小写不敏感。 ZKHost HBase集群的ZK连接地址。 获取ZK连接地址需要先创建跨源连接,管理控制台操作请参考增强型跨源连接。 访问CloudTable集群,填写ZK连接地址(内网)。 访问MRS集群,填写ZK所在节点IP与ZK对外端口,格式为:"ZK_IP1:ZK_PORT1,ZK_IP2:ZK_PORT2"。 说明: 访问MRS集群,只支持创建增强型跨源连接并且需要配置主机信息,管理控制台操作请参考增强型跨源连接,相关API信息请参考创建增强型跨源连接。 TableName 指定在HBase集群中已创建的表名。 RowKey 指定作为rowkey的dli关联表字段,支持单rowkey与组合rowkey。单rowkey支持数值与String类型,不需要指定长度。组合rowkey仅支持String类型定长数据,格式为:属性名1:长度,属性名2:长度。 Cols 通过逗号分隔的DLI表字段与HBase表的列之间的对应关系。其中,冒号前面放置DLI表字段,冒号后面放置HBase表信息,用‘.’分隔HBase表的列族与列名。
  • 注意事项 若所要创建的表已经存在将报错,可以通过添加IF NOT EXISTS参数跳过该错误。 OPTIONS中的所有参数是必选的,参数名称大小写不敏感,但参数值大小写敏感。 OPTIONS中引号内的值前后不能带空格,空格也会被当做有效值。 表名及列名的描述仅支持字符串常量。 创建表时要说明列名及对应的数据类型,目前支持的数据类型为:boolean、short、int、long、float、double和string。 作为RowKey的字段(如上述语法格式中的ATTR1),其值不能为null,长度要大于0,小于或等于32767。 Cols与RowKey中的字段加起来的数量必须与DLI表的字段保持一致,即表中所有的字段都到对应到Cols和RowKey中,但是顺序可以任意。 组合Rowkey只支持String类型,在使用组合Rowkey时,每个属性后面必须带上长度。当Rowkey指定的字段只有一个的时候,该字段的类型可以是支持的所有数据类型,并且不需要填写长度。 在组合Rowkey的场景中 插入Rowkey数据时,如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要短,则会在数据后面补'\0'字符;如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要长,则会在实际插入HBase的时候进行截断。 读取HBase上的Rowkey数据时,如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要短,则会抛出异常(OutofBoundException);如果某个属性的实际数据的长度比属性作为Rowkey时指定的长度要长,则会在读取时进行截断。
  • 语法格式 单个RowKey 1 2 3 4 5 6 7 8 9 CREATE TABLE [IF NOT EXISTS] TABLE_NAME ( ATTR1 TYPE, ATTR2 TYPE, ATTR3 TYPE) USING [CLOUDTABLE | HBASE] OPTIONS ( 'ZKHost'='xx', 'TableName'='TABLE_IN_HBASE', 'RowKey'='ATTR1', 'Cols'='ATTR2:CF1.C1, ATTR3:CF1.C2'); 组合RowKey 1 2 3 4 5 6 7 8 9 CREATE TABLE [IF NOT EXISTS] TABLE_NAME ( ATTR1 String, ATTR2 String, ATTR3 TYPE) USING [CLOUDTABLE | HBASE] OPTIONS ( 'ZKHost'='xx', 'TableName'='TABLE_IN_HBASE', 'RowKey'='ATTR1:2, ATTR2:10', 'Cols'='ATTR2:CF1.C1, ATTR3:CF1.C2'
  • 示例 导入数据前已参考创建OBS表或者创建DLI表中的示例描述创建对应的表。 可使用下列语句将 CS V文件导入到DLI表,“t”为表名。 1 2 LOAD DATA INPATH 'obs://dli/data.csv' INTO TABLE t OPTIONS('DELIMITER'=',' , 'QUOTECHAR'='"','COMMENTCHAR'='#','HEADER'='false'); 可使用下列语句将JSON文件导入到DLI表,“jsontb”为表名。 1 2 LOAD DATA INPATH 'obs://dli/alltype.json' into table jsontb OPTIONS('DATA_TYPE'='json','DATEFORMAT'='yyyy/MM/dd','TIMESTAMPFORMAT'='yyyy/MM/dd HH:mm:ss');
  • 注意事项 导入OBS表时,创建OBS表时指定的路径必须是文件夹,若建表路径是文件将导致导入数据失败。 仅支持导入位于OBS路径上的原始数据。 不建议对同一张表并发导入数据,因为有一定概率发生并发冲突,导致导入失败。 导入数据时只能指定一个路径,路径中不能包含逗号。 当OBS桶目录下有文件夹和文件同名时,导入数据会优先指向该路径下的文件而非文件夹。 导入PARQUET、ORC及JSON类型数据时,必须指定DATA_TYPE这一OPTIONS,否则会以默认的“CSV”格式进行解析,从而导致导入的数据格式不正确。 导入CSV及JSON类型数据时,如果包含日期及时间列,需要指定DATEFORMAT及TIMESTAMPFORMAT选项,否则将以默认的日期及时间戳格式进行解析。
  • 参数说明 表1 参数描述 参数 描述 folder_path 原始数据文件夹或者文件的OBS路径。 db_name 数据库名称。若未指定,则使用当前数据库。 table_name 需要导入数据的DLI表的名称。 以下是可以在导入数据时使用的配置选项: DATA_TYPE: 指定导入的数据类型,当前支持CSV、Parquet、ORC、JSON、Avro类型,默认值为“CSV”。 配置项为OPTIONS('DATA_TYPE'='CSV') 导入CSV和JSON文件时,有三种模式可以选择: PERMISSIVE:选择PERMISSIVE模式时,如果某一列数据类型与目标表列数据类型不匹配,则该行数据将被设置为null。 DROPMALFORMED:选择DROPMALFORMED模式时,如果某一列数据类型与目标表列数据类型不匹配,则不导入该行数据。 FAILFAST:选择FAILFAST模式时,如果某一列类型不匹配,则会抛出异常,导入失败。 模式设置可通过在OPTIONS中添加 OPTIONS('MODE'='PERMISSIVE')进行设置。 DELIMITER:可以在导入命令中指定分隔符,默认值为“,”。 配置项为OPTIONS('DELIMITER'=',')。 对于CSV数据,支持如下所述分隔符: 制表符tab,例如:'DELIMITER'='\t'。 任意的二进制字符,例如:'DELIMITER'='\u0001(^A)'。 单引号('),单引号必须在双引号(" ")内。例如:'DELIMITER'= "'"。 DLI表还支持\001(^A)和\017(^Q),例如:'DELIMITER'='\001(^A)','DELIMITER'='\017(^Q)'。 QUOTECHAR:可以在导入命令中指定引号字符。默认值为"。 配置项为OPTIONS('QUOTECHAR'='"') COMMENTCHAR:可以在导入命令中指定注释字符。在导入操作期间,如果在行的开头遇到注释字符,那么该行将被视为注释,并且不会被导入。默认值为#。 配置项为OPTIONS('COMMENTCHAR'='#') HEADER:用来表示源文件是否有表头。取值范围为“true”和“false”。“true”表示有表头,“false”表示无表头。默认值为“false”。如果没有表头,可以在导入命令中指定FILEHEADER参数提供表头。 配置项为OPTIONS('HEADER'='true') FILEHEADER:如果源文件中没有表头,可在LOAD DATA命令中提供表头。 OPTIONS('FILEHEADER'='column1,column2') ESCAPECHAR:如果用户想在CSV上对Escape字符进行严格验证,可以提供Escape字符。默认值为“\\”。 配置项为OPTIONS('ESCAPECHAR'='\\') 如果在CSV数据中输入ESCAPECHAR,该ESCAPECHAR必须在双引号(" ")内。例如:"a\b"。 MAXCOLUMNS:该可选参数指定了在一行中,CSV解析器解析的最大列数。 配置项为OPTIONS('MAXCOLUMNS'='400') 表2 MAXCOLUMNS 可选参数名称 默认值 最大值 MAXCOLUMNS 2000 20000 设置MAXCOLUMNS Option的值后,导入数据会对executor的内存有要求,所以导入数据可能会由于executor内存不足而失败。 DATEFORMAT:指定列的日期格式。 OPTIONS('DATEFORMAT'='dateFormat') 默认值为:yyyy-MM-dd。 日期格式由Java的日期模式字符串指定。在Java的日期和时间模式字符串中,未加单引号(')的字符'A' 到'Z' 和'a' 到'z' 被解释为模式字符,用来表示日期或时间字符串元素。若模式字符使用单引号 (') 引起来,则在解析时只进行文本匹配,而不进行解析。Java模式字符定义请参见表3。 表3 日期及时间模式字符定义 模式字符 日期或时间元素 示例 G 纪元标识符 AD y 年份 1996; 96 M 月份 July; Jul; 07 w 年中的周数 27(该年的第27周) W 月中的周数 2(该月的第2周) D 年中的天数 189(该年的第189天) d 月中的天数 10(该月的第10天) u 星期中的天数 1 = 星期一, ..., 7 = 星期日 a am/pm 标记 pm(下午时) H 24小时数(0-23) 2 h 12小时数(1-12) 12 m 分钟数 30 s 秒数 55 S 毫秒数 978 z 时区 Pacific Standard Time; PST; GMT-08:00 TIMESTAMPFORMAT:指定列的时间戳格式。 OPTIONS('TIMESTAMPFORMAT'='timestampFormat') 默认值为:yyyy-MM-dd HH:mm:ss。 时间戳格式由Java的时间模式字符串指定。Java时间模式字符串定义详见表3 日期及时间模式字符定义。
  • 常见问题 使用default创建DataSource表时提示“xxx dli datasource v2 tables is only supported in spark3.3 or later version.”怎么办? 使用default创建DataSource表时引擎版本不低于Spark 3.3.1,如果引擎版本低于Spark 3.3.1则会提示上述错误信息,此时请切换使用Hive语法创建表。详细操作请参考使用Hive语法创建DLI表。 使用Spark 3.3.1执行jar作业报错 "xxx don`t support dli v1 table."怎么办? 该错误提示信息说明使用Spark 3.3.1执行Jar作业时不支持执行与该表相关的操作,请切换使用Hive语法重构表数据结构,例如使用Hive语法[STORED AS file_format] CTAS重新创建表后再执行作业。详细创建表操作请参考使用Hive语法创建DLI表。
  • 示例5:创建DLI分区表,自定义表的OPTIONS参数 示例说明:创建DLI表时支持自定义属性名与属性值,OPTIONS参数说明可参考表2。 本例创建名为table3并以col_2为分区依据的DLI分区表。在OPTIONS中配置pmultiLevelDirEnable和compression。 multiLevelDirEnable:本例设置为true,表示查询该表时会迭代读取表路径中的所有文件和子目录文件,若不需要此项配置可以设置为false或不设置(默认为false); compression:当创建的OBS表需要压缩时,可以使用compression关键字来配置压缩格式,本例中就使用了zstd压缩格式。 1 2 3 4 5 6 7 8 9 10 CREATE TABLE IF NOT EXISTs table3 ( col_1 STRING, col_2 int ) USING parquet PARTITIONED BY (col_2) OPTIONS ( multiLeveldirenable = true, compression = 'zstd' );
  • 参数说明 表1 参数描述 参数 是否必选 描述 db_name 否 Database名称。 由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。 table_name 是 Database中的表名。 由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。匹配规则为:^(?!_)(?![0-9]+$)[A-Za-z0-9_$]*$。 特殊字符需要使用单引号('')包围起来。 表名对大小写不敏感,即不区分大小写。 col_name 是 以逗号分隔的带数据类型的列名。 列名由字母、数字和下划线(_)组成。不能是纯数字,且至少包含一个字母。 列名为大小写不敏感,即不区分大小写。 col_type 是 列字段的数据类型。数据类型为原生类型。 请参考原生数据类型。 col_comment 否 列字段描述。仅支持字符串常量。 file_format 是 DLI表数据存储格式,支持:parquet和orc格式。 table_comment 否 表描述。仅支持字符串常量。 select_statement 否 用于CTAS命令,将源表的select查询结果或某条数据插入到新创建的DLI表中。 表2 OPTIONS参数描述 参数 是否必选 描述 默认值 multiLevelDirEnable 否 是否迭代查询子目录中的数据。当配置为true时,查询该表时会迭代读取该表路径中所有文件,包含子目录中的文件。 false compression 否 指定压缩格式。一般为parquet格式时指定该参数,推荐使用'zstd'压缩格式。 -
  • 示例2:创建DLI分区表 示例说明:创建一个名为student的分区表,该分区表使用院系编号(facultyNo)和班级编号(classNo)进行分区,该student表会同时按照不同的院系编号(facultyNo)和不同的班级编号(classNo)分区。 在实际的使用过程中,您可以选择合适的分区字段并将其添加到PARTITIONED BY关键字后。 1 2 3 4 5 6 7 CREATE TABLE IF NOT EXISTS student ( Name STRING, facultyNo INT, classNo INT ) USING orc PARTITIONED BY (facultyNo, classNo);
  • 注意事项 CTAS建表语句不能指定表的属性。 若没有指定分隔符,则默认为逗号(,)。 关于分区表的使用说明: 创建分区表时,PARTITIONED BY中指定分区列必须是表中的列,且必须在Column列表中指定类型。分区列只支持string, boolean, tinyint, smallint, short, int, bigint, long, decimal, float, double, date, timestamp类型。 创建分区表时,分区字段必须是表字段的最后一个字段或几个字段,且多分区字段的顺序也必须对应。否则将出错。 单表分区数最多允许200000个。 2024年1月后新注册使用DLI服务的用户,且使用Spark3.3及以上版本的引擎,在使用DataSource语法创建表时支持使用CTAS创建分区表。
共100000条