联合查询示例
更新时间:2025-01-23
前提条件
已完成创建 BMR 集群,并且配置了 Paimon、Spark 组件,详情请参见创建集群。
操作示例
基于Hive元信息联合查询
- SSH登录集群,参考SSH连接到集群。
- 创建 Paimon 表,参考以下命令:
spark-sql
USE paimon;
USE default;
drop table if exists spark_paimon;
-- 如果没有 bucket,对 spark 没有影响,hive 可以读,但是不能写入。
create table spark_paimon (
id int,
name string
) tblproperties (
'primary-key' = 'id',
'bucket' = '4'
);
INSERT INTO spark_paimon VALUES (1, 'spark-paimon-1'), (2, 'spark-paimon-2');
select * from spark_paimon;
- 结果显示如下:
+------+----------------+
| id | name |
+------+----------------+
| 1 | spark-paimon-1 |
| 2 | spark-paimon-2 |
+------+----------------+
- 创建 Hive 表,参考以下命令:
use default;
CREATE TABLE hive_table (
id INT,
age INT
);
INSERT INTO hive_table VALUES (1, 10), (2, 20);
select * from hive_table;
- 结果显示如下:
OK
1 10
2 20
- Hive 执行联合查询,参考以下命令:
SELECT a.id, a.age, b.name
FROM hive_table a
JOIN spark_paimon b
ON a.id = b.id;
- 结果显示如下:
OK
2 20 spark-paimon-2
1 10 spark-paimon-1
- Spark 执行联合查询 ,参考以下命令:
SELECT a.id, a.age, b.name
FROM spark_catalog.default.hive_table a
JOIN paimon.default.spark_paimon b
ON a.id = b.id;
- 结果显示如下:
1 10 spark-paimon-1
2 20 spark-paimon-2
基于Filesystem元信息联合查询
- SSH登录集群,参考SSH连接到集群;
- 创建 Paimon 表,参考以下命令:
SET spark.sql.catalog.paimon_fs=org.apache.paimon.spark.SparkCatalog;
SET spark.sql.catalog.paimon_fs.warehouse=hdfs://bmr-cluster/warehouse/paimon/spark;
SET spark.sql.catalog.paimon_fs.metastore=filesystem;
use paimon_fs;
create table fs_paimon (
id int,
name string
) tblproperties (
'primary-key' = 'id',
'bucket' = '4'
);
DESCRIBE FORMATTED fs_paimon;
- 结果显示如下:
id int
name string
# Metadata Columns
__paimon_file_path string
__paimon_row_index bigint
__paimon_partition struct<>
__paimon_bucket int
# Detailed Table Information
Name default.fs_paimon
Type MANAGED
Location hdfs://bmr-cluster/warehouse/paimon/spark/default.db/fs_paimon
Provider paimon
Owner hive
Table Properties [bucket=4,path=hdfs://bmr-cluster/warehouse/paimon/spark/default.db/fs_paimon,primary-key=id]
- 设置元信息,参考以下命令:
SET spark.sql.catalog.paimon_fs.metastore;
- 插入数据,参考以下命令:
INSERT INTO fs_paimon VALUES (1, 'fs-paimon-1'), (2, 'fs-paimon-1');
select * from fs_paimon;
- 执行联合查询(spark_table 为 spark-sql 创建):
SELECT a.id, a.age, b.name
FROM spark_catalog.default.spark_table a
JOIN paimon_fs.default.fs_paimon b
ON a.id = b.id;
- 结果显示如下:
1 10 fs-paimon-1
2 20 fs-paimon-1
- 执行联合查询(hive_table 为hive创建):
SELECT a.id, a.age, b.name
FROM spark_catalog.default.hive_table a
JOIN paimon_fs.default.fs_paimon b
ON a.id = b.id;
- 结果显示如下:
1 10 fs-paimon-1
2 20 fs-paimon-1