phoenix连接在多个表上运行连接查询?

fcwjkofz  于 2021-06-08  发布在  Hbase
关注(0)|答案(1)|浏览(377)

我想从spark连接到apachephoenix并运行joinsql查询。根据Phoenix官方网站的建议,他们给出了一个如何从spark连接到Phoenix的例子,但是配置中只使用了一个phoenix表名。请参见下面的示例:

Map<String, String> map = new HashMap<>();
map.put("zkUrl", ZOOKEEPER_URL);
map.put("table", "TABLE_1");
Dataset<Row> df = sparkSession.sqlContext().load("org.apache.phoenix.spark", map);
df.registerTempTable("TABLE_1");
Dataset<Row> selectResult = df.sparkSession().sql(" SELECT * FROM TABLE_1 WHERE COLUMN_1 = 'ABC' ");

在我的phoenix hbase数据库中有两个表 TABLE_1 以及 TABLE_2 我想运行一个sql查询,如下所示:

SELECT * FROM TABLE_1 as A JOIN TABLE_2 as B ON A.COLUMN_1 = B.COLUMN_2 WHERE B.COLUMN_2 = 'XYZ';

如何使用phoenix spark连接运行此查询?

kzipqqlq

kzipqqlq1#

正如上面@shaido在评论部分所建议的那样,我试过了,它正在工作。我分别加载这两个数据集,然后将它们注册为临时表,现在我可以使用这两个表运行连接查询。下面是示例代码。

String table1 = "TABLE_1";
Map<String, String> map = new HashMap<>();
map.put("zkUrl", ZOOKEEPER_URL);
map.put("table", table1);
Dataset<Row> df = sparkSession.sqlContext().load("org.apache.phoenix.spark", map);
df.registerTempTable(tableName);

String table2 = "TABLE_2";
map = new HashMap<>();
map.put("zkUrl", ZOOKEEPER_URL);
map.put("table", table2);
Dataset<Row> df2 = sparkSession.sqlContext().load("org.apache.phoenix.spark", map);
df2.registerTempTable(table2);

Dataset<Row> selectResult = df.sparkSession().sql(" SELECT * FROM TABLE_1 as A JOIN TABLE_2 as B ON A.COLUMN_1 = B.COLUMN_2 WHERE B.COLUMN_2 = 'XYZ' ");

相关问题