开发者社区 > 大数据与机器学习 > 大数据开发治理DataWorks > 正文

dataworks按照文档执行报错?

dataworks按照文档执行报错?
create external table mf_oss_spe_pt (id int, name string)
partitioned by (pt1 string, pt2 string)
stored as TEXTFILE
with serdeproperties (
'odps.properties.rolearn'='acs:ram::1563281086590914:role/aliyunodpsdefaultrole'
)
location "oss://oss-cn-beijing-internal.aliyuncs.com/mfoss*/demo8/";
Caused by: com.aliyun.odps.rest.RestException: RequestId=65DC685C2EC9C83F0099D8C0,Code=ParseError,Message=ODPS-0130161:[10,1] Parse exception - invalid token 'WITH', expect 'SEMICOLON'

展开
收起
真的很搞笑 2024-03-02 09:35:51 100 0
4 条回答
写回答
取消 提交回答
  • 从您提供的错误信息来看,问题似乎出在CREATE EXTERNAL TABLE语句的WITH SERDEPROPERTIES部分。ODPS(Open Data Processing Service,阿里云开放数据处理服务)的语法可能与您尝试使用的Hive或其他大数据处理系统的语法有所不同。

    在ODPS中,CREATE EXTERNAL TABLE语句的WITH SERDEPROPERTIES部分应该使用PROPERTIES代替,并且通常用于指定表的序列化/反序列化(Serde)类和其他属性。此外,ODPS通常使用PARTITIONED BY子句来定义分区列,而不是在WITH SERDEPROPERTIES中指定分区。

    根据您提供的表结构和需求,您可以尝试修改您的CREATE EXTERNAL TABLE语句,如下所示:

    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/"
    PROPERTIES (
      'odps.properties.rolearn' = 'acs:ram::1563281086590914:role/aliyunodpsdefaultrole'
    );
    

    在这个修改后的语句中,我使用了PROPERTIES子句来设置odps.properties.rolearn属性,而不是WITH SERDEPROPERTIES。同时,分区列的定义保持在PARTITIONED BY子句中。

    2024-03-02 22:15:31
    赞同 1 展开评论 打赏
  • 从事java行业9年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    您好,遇到按照DataWorks文档操作报错的情况,一般情况下可能是参数导致的问题,这里查阅错误码ODPS-0130161的错误原因分析:调度参数未赋值或赋值出现异常,建议您先检查一下调度参数的赋值情况
    image.png
    详细内容参考文档:文档
    在分析错误信息invalid token 'WITH', expect 'SEMICOLON'为无效的标记“WITH”,应为“SEMICOLON”,建议您检查一下这块的语法是否有问题。这两项都排除之后还是不行的话,建议您可以扫描下方二维码或电脑端点击这里 加入DataWorks钉钉交流群
    image.png

    2024-03-02 11:49:31
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在阿里云DataWorks中,创建外部表时遇到的错误“ODPS-0130161: Parse exception - invalid token 'WITH', expect 'SEMICOLON'”是由于语法错误导致的。在ODPS SQL(MaxCompute SQL)语法中,在定义CREATE EXTERNAL TABLE语句后直接指定存储格式和位置,而不能直接使用WITH SERDEPROPERTIES来指定角色相关的属性。

    正确的方式来指定OSS外部表并设置访问角色信息应该是通过TBLPROPERTIES而不是SERDEPROPERTIES,并且在指定OSS位置之后需要以分号结束。因此,修正后的语句应该如下所示:

    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/"
    TBLPROPERTIES (
        'odps.properties.rolearn' = 'acs:ram::1563281086590914:role/aliyunodpsdefaultrole'
    );
    

    确保TBLPROPERTIES中的键值对用于配置表级别的属性,其中包括与OSS访问权限相关的角色ARN(Amazon Resource Name,这里是阿里云资源名)。同时,请检查提供的角色ARN是否正确且有效,并且拥有足够的权限访问OSS bucket。

    2024-03-02 11:17:00
    赞同 展开评论 打赏
  • 根据您提供的信息,报错信息显示是由于语法错误导致的解析异常。根据DataWorks在MaxCompute中创建外部表的语法规则,您需要确保SQL语句的正确性。

    在您提供的SQL语句中,似乎问题出现在WITH SERDEPROPERTIES这一部分。请尝试将WITH SERDEPROPERTIES部分移动到CREATE EXTERNAL TABLE语句之后,并且使用分号;来结束CREATE EXTERNAL TABLE语句。以下是修正后的示例代码:

    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/'
    WITH SERDEPROPERTIES (
        'odps.properties.rolearn'='acs:ram::1563281086590914:role/aliyunodpsdefaultrole'
    );
    

    请注意,对于外部表的创建,WITH SERDEPROPERTIES应该在CREATE EXTERNAL TABLE语句之后,并且每个参数之间需要用逗号隔开。另外,LOCATION 参数应该使用单引号 ' 而不是双引号 "

    您可以尝试使用上述修正后的SQL语句来重新创建外部表,看是否能够顺利执行。

    2024-03-02 11:01:18
    赞同 展开评论 打赏

DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。

相关产品

  • 大数据开发治理平台 DataWorks
  • 相关电子书

    更多
    DataWorks数据集成实时同步最佳实践(含内测邀请)-2020飞天大数据平台实战应用第一季 立即下载
    DataWorks调度任务迁移最佳实践-2020飞天大数据平台实战应用第一季 立即下载
    DataWorks商业化资源组省钱秘籍-2020飞天大数据平台实战应用第一季 立即下载

    相关实验场景

    更多