我们使用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, …Run Code Online (Sandbox Code Playgroud) python jsonschema protocol-buffers snowflake-schema snowflake-cloud-data-platform
给定一个整数 n 叉树,任务是找到子序列的最大和,其约束是序列中的 2 个数字不应共享树中的公共边。示例: 1 / \ 2 5 / \ 3 4 最大非相邻和 = 3 + 4 + 5 = 12 以下是http://www.geeksforgeeks.org/maximum-sum-such-中概述的算法的错误扩展没有两个元素相邻?
def max_sum(node, inc_sum, exc_sum):
for child in node.children:
exc_new = max(inc_sum, exc_sum)
inc_sum = exc_sum + child.val
exc_sum = exc_new
inc_sum, exc_sum = max(max_sum(child, inc_sum, exc_sum),
max_sum(child, inc_sum, inc_sum - node.val))
return exc_sum, inc_sum
Run Code Online (Sandbox Code Playgroud)
但我不确定返回时交换 exc_sum 和 inc_sum 是否是实现结果的正确方法,以及如何跟踪可能导致最大总和的可能总和,在本例中,左子树中的最大总和是(1+3+4),而导致最终最大值的总和是(3+4+5),那么应该如何跟踪(3+4)呢?是否应该将所有中间金额存储在表中?
为什么检测字符串S是否为回文的pythonic方法S == S[::-1]- 比下面的实现更快?
i = 0
j = len(S) - 1
while i < j:
if S[i] != S[j]:
return False
i += 1
j -= 1
return True
Run Code Online (Sandbox Code Playgroud) python ×2
algorithm ×1
jsonschema ×1
maximize ×1
palindrome ×1
performance ×1
snowflake-cloud-data-platform ×1
string ×1
tree ×1