开发者社区 > 数据库 > 数据仓库 > 正文

mysql中能执行,在云数据仓库ADB中不能执行,麻烦看看什么原因?

mysql中能执行,在云数据仓库ADB中不能执行,麻烦看看什么原因?

SELECT COUNT(*) AS total FROM deli_customer q LEFT JOIN sale_member m ON q.member_id = m.id AND m.tenant_id = 10001 WHERE CASE WHEN JSON_VALID(q.lc_json_extend_field) THEN q.lc_json_extend_field->'$.lc10215' = '12' ELSE NULL END AND q.logout_status = '0' AND q.delete_flag = '0' AND m.member_status = 1 AND q.tenant_id = 10001
报下面这个错

[HY000][1815] [20002, 2024022314365719216813106903453342658] : line 1:1: SubGt not supported.
99b34c7aa7d1820ef31914b32060e6dc.png

展开
收起
你鞋带开了~ 2024-02-28 16:16:02 53 0
4 条回答
写回答
取消 提交回答
  • 在云数据仓库ADB中不能执行MySQL中的某个语句,可能有以下原因:

    1. 语法不支持:ADB和MySQL的语法存在差异,有些MySQL中的语法在ADB中不被支持。例如,ADB不支持存储过程、触发器等高级特性。
    2. 数据类型不匹配:MySQL和ADB的数据类型存在差异,某些MySQL中的语句在ADB中无法执行,因为数据类型不匹配。例如,MySQL中的DATETIME类型在ADB中对应为TIMESTAMP类型。
    3. 函数或操作符不支持:ADB和MySQL的函数和操作符也存在差异,有些MySQL中的函数或操作符在ADB中不被支持。例如,MySQL中的CONCAT函数在ADB中对应为||操作符。
    4. 权限不足:ADB和MySQL的权限管理机制不同,可能存在权限不足的情况导致某些语句无法执行。

    如果您遇到了这种情况,建议检查语句的语法、数据类型、函数或操作符是否与ADB兼容,并确保您具有足够的权限来执行该语句。如果问题仍然存在,请联系ADB的技术支持团队以获取更多帮助。

    2024-02-29 22:16:53
    赞同 1 展开评论 打赏
  • 阿里云大降价~

    当在MySQL中可以正常执行的查询在云数据仓库ADB中无法执行时,可能的原因包括:

    1. 语法兼容性:尽管ADB高度兼容MySQL协议及SQL标准,但仍存在一些差异。确保查询语句没有使用ADB不支持的MySQL特定功能或语法。
    2. 参数配置:ADB有一系列可配置的参数,这些参数可能影响查询的执行。检查是否有必要调整SET ADB_CONFIG或Hint来优化查询。
    3. 资源限制:ADB可能有默认的资源限制,例如查询的最大执行时间、内存使用等。如果查询超时或者资源使用超出限制,可能会失败。
    4. 版本差异:如果使用的ADB版本与MySQL版本有较大差异,可能存在某些功能或语法的变化。查阅ADB的版本文档以确认支持的功能。
    5. 数据分布和规模:ADB是为大规模并行处理设计的,如果查询在ADB中无法执行,可能是因为数据分布或规模导致的问题。考虑优化查询逻辑或调整数据分布策略。
    6. 权限问题:确认执行查询的用户在ADB中具有足够的权限。权限不足可能导致查询无法执行。
    7. 系统状态:检查ADB的状态,确认没有遇到系统级别的问题,如服务宕机、维护模式等。

    解决这类问题通常需要详细检查错误信息,了解ADB的特性和限制,并根据具体情况进行调整。如果问题依然无法解决,建议联系技术支持获取帮助。

    2024-02-29 19:05:23
    赞同 展开评论 打赏
  • 辛苦将 q.lc_json_extend_field->'$.lc10215' 替换成 json_extract(q.lc_json_extend_field, '$.lc10215' )
    --此回答整理自钉群“云数据仓库ADB-开发者群”

    2024-02-28 18:50:51
    赞同 展开评论 打赏
  • 由于云数据仓库ADB对JSON函数的支持程度不同于MySQL,上述SQL在adb中执行失败是因为它不支持直接在WHERE子句中使用JSON_EXTRACT函数的结果进行条件判断。

    针对您的SQL语句,可以尝试将其改写为adb兼容的形式:

    SELECT COUNT(*) AS total 
    FROM (
        SELECT q.*, 
               IF(JSON_VALID(q.lc_json_extend_field), 
                  q.lc_json_extend_field.GET("$.lc10215"), 
                  NULL) AS lc10215_value
        FROM deli_customer q 
        WHERE q.tenant_id = 10001 
          AND q.logout_status = '0' 
          AND q.delete_flag = '0'
    ) q
    LEFT JOIN sale_member m 
    ON q.member_id = m.id 
    AND m.tenant_id = 10001 
    WHERE COALESCE(q.lc10215_value, '') = '12' 
      AND m.member_status = 1;
    

    这段SQL首先在子查询中提取JSON字段的值,并赋给新的列lc10215_value,然后再在主查询中对此列进行条件判断。注意,这里使用了IF函数和COALESCE函数来处理NULL和空字符串的情况。请根据实际业务逻辑调整处理方式。

    2024-02-28 17:06:15
    赞同 展开评论 打赏

阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。

相关产品

  • 云原生数据仓库 AnalyticDB PostgreSQL版
  • 相关电子书

    更多
    消电行业数据中台解决方案白皮书 立即下载
    (终极版)2020阿里云金融数据中台报告 立即下载
    2020年中国乳制品行业数据中台研究报告 立即下载

    相关镜像