数据湖探索 DLI-使用Spark SQL作业分析OBS数据:常见问题
常见问题
- 问题一:查询OBS分区表报错,报错信息如下:
DLI .0005: There should be at least one partition pruning predicate on partitioned table `xxxx`.`xxxx`.;
问题根因:查询OBS分区表时没有携带分区字段。
解决方案:查询OBS分区表时,where条件中至少包含一个分区字段。
- 问题二:使用DataSource语法指定OBS文件路径创建OBS表,insert数据到OBS表,显示作业运行失败,报:“DLI.0007: The output path is a file, don't support INSERT...SELECT” 错误。
问题示例语句参考如下:
CREATE TABLE testcsvdatasource (name string, id int) USING csv OPTIONS (path "obs://dli-test-021/data/test.csv");
问题根因:创建OBS表指定的OBS路径为具体文件,导致不能插入数据。例如上述示例中的OBS路径为:"obs://dli-test-021/data/test.csv"。
解决方案:使用DataSource语法创建OBS表指定的OBS文件路径改为文件目录即可,后续即可通过insert插入数据。上述示例,建表语句可以修改为:CREATE TABLE testcsvdatasource (name string, id int) USING csv OPTIONS (path "obs://dli-test-021/data");
- 问题三:使用Hive语法创建OBS分区表时,提示语法格式不对。例如,如下使用Hive语法创建以classNo为分区的OBS表:
CREATE TABLE IF NOT EXISTS testtable(name STRING, score DOUBLE, classNo INT) PARTITIONED BY (classNo) STORED AS TEXTFILE LOCATION 'obs://dli-test-021/data7';
问题根因:使用Hive语法创建OBS分区表时,分区字段不能出现在表名后的字段列表中,只能定义在PARTITIONED BY后。
解决方案:使用Hive语法创建OBS分区表时,分区字段指定在PARTITIONED BY后。例如:CREATE TABLE IF NOT EXISTS testtable(name STRING, score DOUBLE) PARTITIONED BY (classNo INT) STORED AS TEXTFILE LOCATION 'obs://dli-test-021/data7';
- 什么是Spark SQL作业_数据湖探索DLISpark SQL作业
- 什么是数据湖探索服务_数据湖探索DLI用途与特点
- 什么是Flink OpenSource SQL_数据湖探索_Flink OpenSource SQL
- 什么是跨源连接-数据湖探索DLI跨源连接
- 华为云内容审核服务_内容审核有什么作用_华为云内容审核的优势
- 数据治理中心_数据开发_数据开发示例_使用教程-华为云
- OBS常见问题_OBS含义_OBS介绍
- 什么是Spark_如何使用Spark_Spark的功能是什么
- 数据治理中心_数据开发_数据开发能力_脚本和节点介绍-华为云
- 图像识别Image服务_什么是图像识别_图像识别应用场景