AWS Glue无法导入MySQL BIT类型布尔列数据的解决咨询
解决MySQL BIT类型列在AWS Glue中值为空的问题
方案1:修改JDBC连接串,强制解析BIT类型为整数
MySQL JDBC驱动默认会把BIT(1)映射为Boolean,但Glue对这种映射的处理存在问题。在Glue的JDBC连接属性中添加tinyInt1isBit=false参数,可让驱动将BIT列解析为TINYINT,Glue就能正确读取非空值。
操作步骤:
- 打开AWS Glue控制台,找到对应JDBC连接
- 编辑连接,在「额外JDBC属性」中添加键值对:
tinyInt1isBit=false - 重新运行爬虫,或手动将数据目录中的列类型改为INT,之后ETL作业即可正常读取值
方案2:在Glue ETL脚本中手动处理类型
若不想修改JDBC连接,可直接在ETL脚本里手动指定列类型并转换:
- 读取数据源时自定义Schema,将该列类型设为
int,覆盖自动映射的boolean - 通过Spark函数完成类型转换
示例脚本片段:
from pyspark.sql.functions import col # 自定义表Schema,替换为实际表的完整字段定义 custom_schema = "is_available int, column2 string, column3 bigint, ..." df = glueContext.create_dynamic_frame.from_options( connection_type="mysql", connection_options={ "url": "jdbc:mysql://your-db-host:3306/your-db-name", "dbtable": "your-table-name", "user": "your-db-user", "password": "your-db-pass" }, schema=custom_schema ) # 或在现有动态帧上转换列类型 df = df.withColumn("is_available", col("is_available").cast("int"))
方案3:修改MySQL表结构(可选)
如果业务允许,直接将BIT类型列改为TINYINT(1),Glue爬虫会直接识别为INT类型,无需额外配置:
ALTER TABLE your_table MODIFY COLUMN is_available TINYINT(1) DEFAULT 0 NOT NULL;
内容的提问来源于stack exchange,提问作者J.Cart
相关产品推荐
相关产品推荐

