Oracle 11g使用standard_hash函数时出现无效标识符错误求助
解决STANDARD_HASH函数报错的问题
问题根源
STANDARD_HASH是Spark SQL专属函数,如果你直接在MySQL、PostgreSQL这类数据库的客户端执行这条SQL,数据库本身不支持该函数,所以会报"invalid identifier"错误——不管字段类型是Integer、Varchar还是Date,只要执行环境不对,都会触发这个报错。
对应解决方案
- 在数据库端生成哈希:改用对应数据库自带的哈希函数,比如:
- MySQL:使用
MD5(pk_time)或SHA2(pk_time, 256) - PostgreSQL:使用
md5(pk_time::text)或sha256(pk_time::text) - Oracle:本身支持
STANDARD_HASH(pk_time),若仍报错,检查拼写或权限问题
- MySQL:使用
- 在AWS Glue作业中处理:
- 不要在数据库端执行SQL,而是在Glue的PySpark脚本里通过Spark SQL运行,示例代码:
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # 通过Spark SQL执行查询 df = spark.sql("select standard_hash(pk_time) from schema.table") df.show() - 关于Glue并行读取的
hashfield选项:这个参数是Glue自动完成哈希分区的,不需要你手动调用STANDARD_HASH。只需在创建DynamicFrame时指定该参数为目标字段名即可,示例代码:dynamic_frame = glueContext.create_dynamic_frame.from_options( connection_type="jdbc", connection_options={ "url": "你的数据库地址", "dbtable": "schema.table", "hashfield": "pk_time", "hashpartitions": "4" # 设置并行分区数 } )
- 不要在数据库端执行SQL,而是在Glue的PySpark脚本里通过Spark SQL运行,示例代码:
内容的提问来源于stack exchange,提问作者Gocht
相关产品推荐
相关产品推荐

