You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Glue脚本Redshift并行查询报语法错误求助

问题定位与修复方案

核心错误原因

  1. 查询语句末尾冗余的AND:你的Redshift查询字符串最后保留了AND,当启用enablePartitioningForSampleQuery时,Glue会自动在原查询的WHERE子句后追加哈希分区过滤条件(比如MOD(day, N) = X),拼接后的SQL会变成... AND AND MOD(...) = ...,直接触发syntax error at or near ")"。

    • MySQL脚本未报错是因为MySQL解析器对末尾冗余AND有容错性,但这属于不规范写法,同样需要修正。
  2. hashpartitions参数类型错误:你传入的是日期字符串str(end_date),但该参数要求是整数类型的分区数量,字符串会导致Glue生成的SQL语法异常。

  3. hashfield字段有效性问题:你指定的hashfield是day,但当前查询未涉及该字段,需确保test_db.public.test_table表中存在day字段,否则追加的分区条件会因字段不存在报错。

修复步骤

1. 修正Redshift查询语句

删除末尾冗余的AND,确保基础SQL语法合法:

query = f"""
    SELECT 
        DISTINCT id as id_list 
    FROM test_db.public.test_table 
    WHERE timestamp BETWEEN {start} AND {end}
"""

2. 修正hashpartitions参数

将其改为整数类型的分区数量(比如根据业务需求设置为30、60等),示例:

# 假设需要按30个分区并行查询
"hashpartitions": "30",

注意:如果end_date是当月最后一天,你想以此作为分区数,需要先将日期转换为天数(比如end_date.day)再转为字符串。

3. 验证hashfield字段

确保test_db.public.test_table中存在day字段;如果day是从timestamp字段派生的(比如日期部分),需调整hashfield为timestamp,或在查询中明确提取该字段并用于分区:

# 示例:如果day是timestamp的日期部分,调整hashfield为timestamp
"hashfield": "timestamp",

修正后的完整Redshift脚本片段

query = f"""
    SELECT 
        DISTINCT id as id_list 
    FROM test_db.public.test_table 
    WHERE timestamp BETWEEN {start} AND {end}
"""
# Get list of ids from Redshift
redshift_data_frame = glueContext.create_dynamic_frame.from_options(
    connection_type="redshift",
    connection_options={
        "sampleQuery": query,
        "redshiftTmpDir": args["TempDir"],
        "useConnectionProperties": "true",
        "connectionName": "redshift-conn", 
        "enablePartitioningForSampleQuery": True,
        "hashfield": "day",  # 确保该字段存在于目标表中
        "hashpartitions": "30",  # 替换为实际需要的整数分区数
        "aws_iam_role": args["AWS_IAM_ROLE"],
    },
    additional_options={"aws_iam_role": args["AWS_IAM_ROLE"]},
    transformation_ctx="redshift_data_frame",
)

内容的提问来源于stack exchange,提问作者Shardul Birje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:13:18