dremio 外部反射的意思是,反射的数据是在外部存储中,而不是由dremio 自己生成的,典型的场景是我们自己已经包含了物化的数据
而且我们想直接使用物化的数据
创建外部反射
- 创建vds
CREATE VDS "myWorkspace"."sales_by_region" AS
SELECT
AVG(sales_amount) average_sales,
SUM(sales_amount) total_sales,
COUNT(*) sales_count,
region
FROM mySource.sales
GROUP BY region
- 创建外部反射
ALTER DATASET "myWorkspace"."sales_by_region"
CREATE EXTERNAL REFLECTION "external_sales_by_region"
USING "mySource"."sales_by_region"
参考示例
- 环境准备
docker-compose 同时进行一些数据表的创建
version: "3"
services:
dremio:
image: dremio/dremio-oss:15.0.0
ports:
- "9047:9047"
- "31010:31010"
postgres:
image: postgres:12.2
environment:
- "POSTGRES_PASSWORD=dalong"
ports:
- "5433:5432"
// table sql
CREATE TABLE myapps (
id SERIAL PRIMARY KEY,
username text,
userage integer
);
INSERT INTO "public"."myapps"("id","username","userage")
VALUES
(1,E'dalong',22),
(2,E'rong',3333),
(3,E'app',100);
- 创建vds
CREATE VDS "demoapp"."myages2" AS
SELECT
SUM(userage) total_ages,
COUNT(*) user_count,
username
FROM pg.myapps
GROUP BY username
- 创建外部反射
// pg 创建聚合表
create table sourcereflection2 as
SELECT
SUM(userage) total_ages,
COUNT(*) user_count,
username
FROM myapps
GROUP BY username;
// 修改数据支持外部反射
ALTER DATASET "demoapp"."myages2"
CREATE EXTERNAL REFLECTION "external_users_by_username"
USING "pg"."sourcereflection2"
- 访问效果
说明
当前外部反射不能在解决中看到,直接通过操作函数进行查看,同时我们可以通过系统内部的内存表查看状态sys.reflections,同时注意官方在实现外部反射的时候会进行vds 与外部发射表schema(字段以及类型的判断)目前数据类型的兼容处理上不是很方便,推荐结合pg arp 扩展中定义的数据类型进行处理,同时结合information schema 进行外部数据反射的创建,不然会很费事的。。。。