mav*_*ckz 6 python jsonschema protocol-buffers snowflake-schema snowflake-cloud-data-platform
我们使用protocol buffers(protobuf) 在内部定义我们的模式,并让翻译器转换为各种其他内部表示形式,例如 JSON Schema(Protobuf 到 JSON 模式转换器),以便让 protobuf 模式成为事实来源。
我们还计划从 protobuf 模式创建 SQL DDL,但找不到可靠且支持良好的转换器。我们发现的一些工具(例如jsonutils)似乎并不活跃。
SQL 到 protobuf 生成器很多(示例: https: //github.com/jackskj/protoc-gen-map/)
我们需要一个简单的转换器来将 protobuf 模式转换为CREATE有关 protobuf 模式创建的语句,以及ALTER在 SnowSQL 中将新列添加到 protobuf 模式时的潜在语句(我们不支持更改字段类型或删除 protobuf 模式中的字段)。嵌套消息可以存储为variant且不必展平。是否有任何工具,或者我们应该为此编写一个自定义工具?
message Foo {
string uuid = 1;
MessageType1 message_type1 = 2;
MessageType2 message_type2 = 3;
google.protobuf.Timestamp updated_at = 4;
float some_num = 5;
}
Run Code Online (Sandbox Code Playgroud)
被翻译成
CREATE TABLE FOO (
uuid string,
message_type1 variant,
message_type2 variant,
updated_at TIMESTAMP_LTZ(9),
some_num float
);
Run Code Online (Sandbox Code Playgroud)
更新到架构
message Foo {
string uuid = 1;
MessageType1 message_type1 = 2;
MessageType2 message_type2 = 3;
google.protobuf.Timestamp updated_at = 4;
float some_num = 5;
string new_field = 6;
}
Run Code Online (Sandbox Code Playgroud)
将翻译为
ALTER TABLE FOO ADD COLUMN new_field string;
Run Code Online (Sandbox Code Playgroud)
或者
CREATE TABLE FOO (
uuid string,
message_type1 variant,
message_type2 variant,
updated_at TIMESTAMP_LTZ(9),
some_num float,
new_field string
);
Run Code Online (Sandbox Code Playgroud)