dremio 的外部反射使用说明

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 进行外部数据反射的创建,不然会很费事的。。。。

参考资料

https://docs.dremio.com/acceleration/creating-reflections/
https://docs.dremio.com/rest-api/reflections/reflection/#refesh-statuses
https://docs.dremio.com/deployment/query-non-iso-8859/

posted on 2021-08-02 21:39  荣锋亮  阅读(285)  评论(0编辑  收藏  举报

导航