有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们可以在spark sql中启动传统的连接查询吗

假设我有两张桌子,表1和表2

形成的查询如下:select * from table1 inner join table2 on table1.id = table2.id;

现在,当我们通过这段代码加载spark数据库连接时。我们怎么能提到两个表,这样就可以触发连接

参考代码

spark.read().format("jdbc").option("url", "jdbc:mysql://localhost:3306/databasename")
    .option("driver", "com.mysql.jdbc.Driver")
    .option("dbtable", "table1")
    .option("user", "root")
    .option("password", "root")
    .load().createOrReplaceTempView("table1");

Dataset<Row> sql = spark.sql("select * from table1 inner join table2 on table1.id = table2.id");

我试过上面的代码,但上面写着table2 not found。因此,上面的查询可以从spark sql启动吗


共 (2) 个答案

  1. # 1 楼答案

    我明白你的意思

    在dbtable选项中,您可以使用查询并加载数据帧

    spark.read().format("jdbc").option("url", "jdbc:mysql://localhost:3306/databasename")
    .option("driver", "com.mysql.jdbc.Driver")
    .option("dbtable", s”select * from table1 inner join table2 on table1.id=table2.id")
    .option("user", "root")
    .option("password", "root")
    .load();
    

    确保查询传递的内容应该与数据库内联

  2. # 2 楼答案

    在dbtable选项中,您可以使用查询,但要使用别名并加载数据帧

    Dataset<Row> load = spark.read().format("jdbc").option("url", "jdbc:mysql://localhost:3306/etl_config")
    .option("driver", "com.mysql.jdbc.Driver")
    .option("dbtable", "(select * from forms inner join form_entity on forms.form_id = form_entity.form_parent_id where forms.form_id = 3)tmp")
    .option("user", "root")
    .option("password", "root")
    .load();
    

    上述配置将解析为select * from tmp where 1=0;