从mysql读取位数据类型并使用aws glue转换为红移的问题

np8igboo  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(254)

我在mysql数据库中有一个表,其中包含一个名为 activity 数据类型为bit。当转换为int时,它可以采用值1、2或3。
在aws胶水中使用爬虫时,它会识别 activity 作为布尔值。我试图编辑表的模式并更改表的数据类型 activity 但glue在运行作业时仍将其读取为布尔值。
我也尝试使用applymapping将其转换为int,但没有成功。
有什么办法解决这个问题吗?

ljsrvy3e

ljsrvy3e1#

您可以使用spark/pyspark代码来读取mysql数据库中的表。例如,使用pyspark如下:

jdbcUrl = "jdbc:mysql://{0}:{1}/{2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
connectionProperties = {
  "user" : jdbcUsername,
  "password" : jdbcPassword,
  "driver" : "com.mysql.jdbc.Driver"
}
employees_table = spark.read.jdbc(jdbcUrl, "employees", connectionProperties)

您可以在这个链接上找到更多信息:spark数据源希望spark在推断模式方面比aws glue做得更好。

i2loujxw

i2loujxw2#

我通过将一个查询下推到mysql数据库解决了这个问题,在mysql数据库中,我使用以下命令将位读入glue时将其转换为int:

pushdown_query = "(SELECT col1, CAST(activity AS INT) AS activity FROM my_table) my_table"

df = glueContext.read.format("jdbc")\
.option("driver", "com.mysql.jdbc.Driver") \
.option("url", db_url) \
.option("dbtable", pushdown_query) \
.option("user", db_user) \
.option("password", db_pass).load()

相关问题