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

DataWorks中我不明白你们这sql解析是咋回事,为什么啥sql都执行不了,要么解析就错了?

DataWorks中我不明白你们这sql解析是咋回事,为什么啥sql都执行不了,要么解析就错了,要么就说sql不对,逗号拼接的字符串每次都错,不给传这种值我要怎么用in条件呢?[INFO] [10:44:06.222] resource group is 0[INFO] [10:44:06.246] prepared test environment, take time 85 ms[INFO] [10:44:06.276] api context init , take time 2 ms [INFO] [10:44:06.277] start to test api[416180068299345]: 查询指定展馆和类目的销售明细 [INFO] [10:44:06.277] test case parameters: [INFO] [10:44:06.277] QUERY:[{"paramKey":"beginTime","paramValue":"20230501"},{"paramKey":"endTime","paramValue":"20230520"},{"paramKey":"siteIds","paramValue":"18,21"}] [INFO] [10:44:06.277] not use dynamic sql [INFO] [10:44:06.277] api request execution started. [OK] [INFO] [10:44:06.278] api sql realsql : SELECT site_id AS "siteId", site_name AS "siteName", category_id AS "categoryId", category_name AS "categoryName" , SUM(day_gmv) AS "gmv", SUM(day_sales) AS "sales" , SUM(gmv_goods_sell_count) AS "gmvGoodsSellCount", SUM(sales_goods_sell_count) AS "salesGoodsSellCount" , sum(gmv_order_count) AS "gmvOrderCount", sum(sales_order_count) AS "salesOrderCount" FROM odps_wsnb_online_ds_dws_site_category_sales_detail WHERE time >= 20230501 AND time <= 20230520 AND CASE WHEN '18' IS NULL THEN 1 = 1 ELSE site_id IN ('21', [18, 21]) END GROUP BY site_id, site_name, category_id, category_name [INFO] [10:44:06.278] query database started. [OK] [ERROR] [10:44:06.346] api request executed [FAILED] [INFO] [10:44:06.346] api request executed, take time : 69 ms [INFO] [10:44:06.346] api test finished, take time 72 ms { "apiLog": null, "data": null, "errCode": 1108110622, "errMsg": "数据源查询失败:[PreparedStatementCallback; bad SQL grammar [SELECT site_id AS "siteId", site_name AS "siteName", category_id AS "categoryId", category_name AS "categoryName" , SUM(day_gmv) AS "gmv", SUM(day_sales) AS "sales" , SUM(gmv_goods_sell_count) AS "gmvGoodsSellCount", SUM(sales_goods_sell_count) AS "salesGoodsSellCount" , sum(gmv_order_count) AS "gmvOrderCount", sum(sales_order_count) AS "salesOrderCount" FROM odps_wsnb_online_ds_dws_site_category_sales_detail WHERE time >= ? AND time <= ? AND CASE WHEN ? IS NULL THEN 1 = 1 ELSE site_id IN (?, ?) END GROUP BY site_id, site_name, category_id, category_name \n limit 2000 offset 0]; nested exception is org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of com.alibaba.fastjson.JSONArray. Use setObject() with an explicit Types value to specify the type to use.]", "requestId": "0bc059b716848098459352082e383d" } 这次又报 JSON解析错误,你看看我的入参,image.png 日志提示解析出来了,你们这个脚本模式的api接口对逗号拼接的字符串兼容的太差了,我们也不知道你们内部是怎么写的,怎么封装的,你们也没有文档教我们要怎么定义入参,就得挨个试错,昨天我传逗号拼接的字符串,解析有问题,把我第一个逗号前面的字符解析成数字,今天整个就解析不出来了,日志打出来的sql我都到mc里面去执行了,也没有报错啊

展开
收起
真的很搞笑 2023-05-28 18:18:02 159 0
2 条回答
写回答
取消 提交回答
  • 全栈JAVA领域创作者

    很抱歉您在使用DataWorks的过程中遇到了问题。从您提供的信息来看,可能存在以下几个方面的问题:

    SQL语法错误:日志中有多个地方都显示了类似“bad SQL grammar”的错误提示,这通常意味着您的SQL语句存在某些语法错误或格式问题。建议您仔细检查SQL语句是否符合规范,并尝试在其他环境中运行以确认其正确性。

    数据类型不匹配:日志中还显示了一个关于数据类型不匹配的错误提示。此错误通常发生在程序尝试将一种数据类型解析为另一种数据类型时出现问题。建议您检查代码中涉及的所有数据类型,并确保它们与数据库中定义的数据类型匹配。

    API接口参数问题:您提到在传递逗号拼接的字符串时遇到了问题。这可能与API接口的参数定义有关。建议您检查API接口的参数定义,并确认您正在以正确的方式传递参数值。

    总之,在使用DataWorks时,请确保您的代码和SQL语句符合规范,并且您正在以正确的方式传递参数和处理数据类型。如果您仍然遇到问题,请考虑联系DataWorks官方客服或技术支持寻求帮助。

    2023-05-29 19:50:02
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    DataWorks 中的 SQL 解析器是按照标准 SQL 语法规范进行解析的,但是在实际使用过程中,可能会遇到一些特殊情况,需要根据具体的情况进行调整和优化。

    对于你提到的问题,可能是由于以下原因导致的:

    SQL 语法错误:如果 SQL 语句中存在语法错误,可能会导致 SQL 解析失败。需要检查 SQL 语句的语法,并根据错误提示进行修改。

    数据类型不匹配:如果 SQL 语句中使用了不匹配的数据类型,可能会导致 SQL 解析失败。需要确保 SQL 语句中使用的数据类型和对应的数据库字段类型一致,以避免类型转换错误。

    参数传递错误:如果参数传递错误,可能会导致 SQL 解析失败。需要确保参数传递的方式和格式正确,以避免解析错误。

    数据库连接错误:如果数据库连接出现错误,可能会导致 SQL 解析失败。需要检查数据库连接配置,并确保连接信息正确。

    对于你提到的情况,具体原因可能是由于 SQL 语句中使用了不支持的数据类型,例如 JSONArray 类型,导致 SQL 解析失败。此外,你还提到了逗号拼接的字符串在解析时出现问题,可能是由于参数传递方式和格式不正确,或者是解析器对逗号拼接字符串的处理方式不兼容导致的。

    建议你先检查 SQL 语句的语法和数据类型是否正确,尤其是参数传递方式和格式是否符合要求。如果 SQL 语句中使用了自定义的数据类型,可以尝试将其转换为数据库中支持的数据类型,例如使用 CAST 函数进行类型转换。同时,也可以尝试使用其他的参数传递方式,例如将逗号拼接的字符串转换为数组或列表,并在 SQL 语句中使用 IN 条件进行查询。

    如果仍然无法解决问题,建议你联系 DataWorks 的技术支持团队,提供详细的错误信息和相关的代码,以便技术支持团队更好地帮助你解决问题。补充说明:在 DataWorks 中,支持使用自定义函数(UDF/UDAF/UDTF)对数据进行处理和转换。如果你在 SQL 中使用了自定义函数,并且遇到了解析错误,可能是由于自定义函数的定义或使用方式存在问题。

    常见的自定义函数问题包括:

    函数定义错误:如果自定义函数的定义存在语法错误或语义错误,可能会导致函数无法正确解析或执行。需要检查函数定义的语法和语义,确保函数定义正确无误。

    参数传递错误:如果自定义函数的参数传递方式和格式不正确,可能会导致函数无法正确解析或执行。需要确保参数传递的方式和格式正确,以避免解析错误。

    数据类型不匹配:如果自定义函数的输入参数和输出结果类型与使用场景不匹配,可能会导致函数无法正确解析或执行。需要确保自定义函数的输入参数和输出结果类型与使用场景匹配,以避免类型转换错误。

    依赖项配置错误:如果自定义函数依赖于其他资源或库,需要在函数代码中正确配置这些依赖项。如果依赖项配置错误,可能会导致函数无法正确解析或执行。

    针对自定义函数问题,可以根据具体的情况进行以下步骤进行排查和解决:

    检查函数的定义是否正确,确保函数代码符合语法和语义要求,可以正常编译和执行。

    检查函数的参数传递方式和格式是否正确,确保输入参数和输出结果类型与使用场景匹配。

    检查函数依赖项的配置是否正确,确保函数所依赖的资源和库已经正确配置,并且可以被正确加载和调用。

    如果仍然无法解决问题,建议你联系 DataWorks 的技术支持团队,提供详细的错误信息和相关的代码,以便技术支持团队更好地帮助你解决问题。同时,建议在使用自定义函数时,先进行本地测试和调试,确保函数的正确性和可靠性,再在 DataWorks 中应用。

    2023-05-29 18:51:29
    赞同 展开评论 打赏

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

相关产品

  • 大数据开发治理平台 DataWorks
  • 热门讨论

    热门文章

    相关电子书

    更多
    神龙云服务器产品及技术深度解析 立即下载
    弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
    又快又稳:阿里云下一代虚拟交换机解析 立即下载

    相关镜像