dbt create table branch 问题
属于社区有人的一个提问,实际上dremio 支持对于nessie source 特定branch 的 table 的创建,而且源码也有信息,只是官方文档缺少说明
branch创建表参考测试
- 一个简单sql
CREATE table dbtv4.myappv5 AT BRANCH prod as select * from pg.public.sensor
- 内部解析处理
<CREATE> { pos = getPos(); }
<TABLE>
[ <IF> <NOT> <EXISTS> { ifNotExists = true; } ]
tblName = CompoundIdentifier()
[ fieldList = TableElementListWithMasking() ]
[ sqlTableVersionSpec = WriteableAtVersionSpec() ]
(
(
<STRIPED> {
partitionDistributionStrategy = PartitionDistributionStrategy.STRIPED;
}
|
WriteableAtVersionSpec
SqlTableVersionSpec WriteableAtVersionSpec() :
{
SqlParserPos pos;
SqlIdentifier simpleId;
TableVersionType tableVersionType = TableVersionType.NOT_SPECIFIED;
SqlNode specifier = SqlLiteral.createCharString("NOT_SPECIFIED",SqlParserPos.ZERO);
}
{
<AT> { pos = getPos(); }
(
<BRANCH> simpleId = SimpleIdentifier()
{
tableVersionType = TableVersionType.BRANCH;
specifier = SqlLiteral.createCharString(simpleId.toString(), simpleId.getParserPosition());
}
|
(<REF> | <REFERENCE>) simpleId = SimpleIdentifier()
{
tableVersionType = TableVersionType.REFERENCE;
specifier = SqlLiteral.createCharString(simpleId.toString(), simpleId.getParserPosition());
}
)
{
return new SqlTableVersionSpec(pos, tableVersionType, specifier, null);
}
}
dbt dremio 支持的解决方法
因为默认是基于create_table_as 这个macro 处理的,如果不支持就需要自己扩展了,方法很多,一种是修改官方的dbt dremio adapter ,还有就是开发自己的dbt pacakge 重写一个dremio__create_table_as
的macro 支持branch, 之后可以结合dispatch 能力使用自己开发的
说明
以上是一个简单说明,后边可以实现一个示例,方便使用,核心是使用好dbt 提供的能力进行扩展
参考资料
https://docs.getdbt.com/reference/dbt-jinja-functions/dispatch
https://docs.dremio.com/current/reference/sql/commands/apache-iceberg-tables/apache-iceberg-create
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-07-20 graylog 源码结构&构建简单说明
2020-07-20 openresty + gor+minio 集成
2019-07-20 jaeger使用yugabyte作为后端存储的尝试以及几个问题