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

如何通过AWS Glue Notebook直接查询SAP HANA

在AWS Glue Notebook中使用SAP HANA JDBC驱动执行自定义查询

可行解决方案

1. 用子查询替代dbtable参数

SAP HANA的NGDBC驱动支持将子查询作为dbtable参数的值,以此实现自定义查询逻辑,避免全表加载。写法如下:

df = glueContext.read.format("jdbc")\
    .option("driver", jdbc_driver_name)\
    .option("url", db_url)\
    .option("dbtable", "(SELECT KUNNR, NAME1, LAND1 FROM KNA1 WHERE LAND1 = 'DE') AS DE_CUSTOMERS")\
    .option("user", db_username)\
    .option("password", db_password)\
    .load()

注意:子查询必须指定别名(示例中的DE_CUSTOMERS),否则驱动会解析失败。这种方式本质是让HANA先执行过滤/聚合逻辑,只返回需要的数据,大幅降低数据传输成本。

2. 开启谓词下推+并行读取

如果需要处理大表,结合pushDownPredicate和分区参数,既能让过滤逻辑在HANA端执行,又能并行读取数据提升效率:

df = glueContext.read.format("jdbc")\
    .option("driver", jdbc_driver_name)\
    .option("url", db_url)\
    .option("dbtable", "KNA1")\
    .option("user", db_username)\
    .option("password", db_password)\
    .option("partitionColumn", "KUNNR")\
    .option("lowerBound", "0000000001")\
    .option("upperBound", "9999999999")\
    .option("numPartitions", 4)\
    .option("pushDownPredicate", "true")\
    .load()

# 后续的过滤逻辑会自动下推到HANA执行
filtered_df = df.filter(df.LAND1 == 'FR')

pushDownPredicate会将DataFrame的过滤条件转换为SQL推送到HANA执行,而非拉取全表后再过滤。选择分布均匀的partitionColumn(比如主键KUNNR)能避免数据倾斜。

3. 重试query参数(部分场景有效)

部分版本的Glue对NGDBC驱动的query参数支持可能存在兼容性问题,可重试确认是否是配置问题:

df = glueContext.read.format("jdbc")\
    .option("driver", jdbc_driver_name)\
    .option("url", db_url)\
    .option("query", "SELECT * FROM KNA1 WHERE ERDAT >= '20240101'")\
    .option("user", db_username)\
    .option("password", db_password)\
    .load()

如果依然无效,优先采用子查询的方案,这是JDBC驱动通用的兼容写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:35:27