数据湖探索 DLI-使用Spark SQL作业分析OBS数据:常见问题

时间:2024-05-20 09:43:43

常见问题

  • 问题一:查询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';
support.huaweicloud.com/devg-dli/dli_05_0044.html