我们如何使用 jdbc 执行连接查询,而不是使用 pyspark 获取多个表
Posted
技术标签:
【中文标题】我们如何使用 jdbc 执行连接查询,而不是使用 pyspark 获取多个表【英文标题】:instead of fetching multiple tables using pyspark how can we execute join query using jdbc 【发布时间】:2018-03-06 12:03:18 【问题描述】:客户 - c_id、c_name、c_address 产品 - p_id、p_name、价格 供应商 - s_id、s_name、s_address 订单 - o_id、c_id、p_id、数量、时间
SELECT o.o_id,
c.c_id,
c.c_name,
p.p_id,
p.p_name,
p.price * o.quantity AS amount
FROM customer c
JOIN orders o ON o.c_id = c.c_id
JOIN product p ON p.p_id = o.p_id;
我想在不获取 3 个表作为 pyspark 中的单独数据帧并在数据帧上执行连接的情况下执行上述查询。
【问题讨论】:
【参考方案1】:您可以使用查询代替表,如下所述
参考PySpark Documentation
df = spark.read.jdbc(
"url", "(query) as table",
properties="user":"username", "password":"password")
你的情况是:
df = spark.read.jdbc("url", """
(
SELECT o.o_id,
c.c_id,
c.c_name,
p.p_id,
p.p_name,
p.price * o.quantity AS amount
FROM customer c
JOIN orders o ON o.c_id = c.c_id
JOIN product p ON p.p_id = o.p_id
) as table""", properties="user":"username", "password":"password")
这个answer 使用了这种类型的查询来代替表。这个question 也与您的情况相关
【讨论】:
以上是关于我们如何使用 jdbc 执行连接查询,而不是使用 pyspark 获取多个表的主要内容,如果未能解决你的问题,请参考以下文章
java使用jdbc连接mysql数据库,表里有记录,但是查询的结果集为空,是啥原因