Google 下一张幻灯片中使用的是什么语言
What language is used in this slide from Google Next
我正在观看 Google 下一节课,因为我对 Google 的云和他们的 Go 语言很感兴趣。
开发者ecosystems/communities有他们的做事方式,文化习俗,这对于没有经验的外行来说真的很陌生。
所以我有几个菜鸟问题:
- 这是什么语言?
- 示例中Google使用的是什么语言,Python,Go,还是伪代码?
为什么调用了getFailedInserts()
但是get的结果没有赋值给任何东西?
使用我称之为魔法字符串的东西,即 "WriteMutatedRecords" 作为指令而不是直接命名方法或使用枚举或字符串常量是否正常?
代码示例看起来像是用 Scala 或 Java 编写的。您可以从一些指标中看出:
- 代码具有 Java 风格的语法
- 方法是在对象上调用的(例如
input
),这意味着它是一种面向对象的语言
new BigQuerySchemaMutator()
是典型的 Java - 样式构造函数
然而,这些指标并没有给出任何迹象表明它是 Scala 还是 Java。这些语言的语法非常相似,都是JVM-lanugages。
在我看来,Scala 的最强指标是代码是用函数式的方式编写的,它包含对 BigQueryIO
的两个方法调用,这可以是 [=56= 的静态方法] BigQueryIO
本身在 Java 的情况下,或者是在 Scala 中的 object BigQueryIO
上定义的方法,这是该语言中的常见设计模式。
然而,最后的 ;
只有 Java 才需要。
对于阅读代码示例的人来说,这个问题实际上并不重要,因为 Apache Beam(这里似乎使用的是 SDK)是一个 Java 库 - 它可以在 Java 和 Scala。
getFailedInserts
的结果似乎通过调用 .apply
进一步处理。这种风格叫做函数式编程.
这是一种完全不同的编程方法,而不是大多数其他语言中常见的过程编程模式。 (例如,将某些内容存储在变量/一般变量中)
请注意,此示例本身实际上不包含任何函数式编程(例如,高阶函数别名 lambda),但函数式编程风格很明显。
不使用魔法字符串一直被认为是最佳实践,但对于这样的代码示例,他们可能希望代码尽可能简单——因为它已经是单行代码了(尽管有换行符)。
代码示例 Java 使用 Apache Beam 编程模型 (https://beam.apache.org/)
我相信幻灯片中的完整代码在这里:
https://github.com/ryanmcdowell/dataflow-dynamic-schema/blob/master/src/main/java/com/google/cloud/pso/pipeline/DynamicSchemaPipeline.java
幻灯片中的代码:
- 尝试将数据插入 table 'events_table'
- 如果它 returns 来自 Big Query API 的暂时性错误(例如 "column 'foo' does not exist"),它会运行 table 突变添加 'foo' 并插入数据再次。
它是一种将灵活的 tables 创建到 Big Query 中的模式,Big Query 是一个预定义的模式列式数据库。
我正在观看 Google 下一节课,因为我对 Google 的云和他们的 Go 语言很感兴趣。
开发者ecosystems/communities有他们的做事方式,文化习俗,这对于没有经验的外行来说真的很陌生。
所以我有几个菜鸟问题:
- 这是什么语言?
- 示例中Google使用的是什么语言,Python,Go,还是伪代码?
为什么调用了
getFailedInserts()
但是get的结果没有赋值给任何东西?使用我称之为魔法字符串的东西,即 "WriteMutatedRecords" 作为指令而不是直接命名方法或使用枚举或字符串常量是否正常?
代码示例看起来像是用 Scala 或 Java 编写的。您可以从一些指标中看出:
- 代码具有 Java 风格的语法
- 方法是在对象上调用的(例如
input
),这意味着它是一种面向对象的语言 new BigQuerySchemaMutator()
是典型的 Java - 样式构造函数
然而,这些指标并没有给出任何迹象表明它是 Scala 还是 Java。这些语言的语法非常相似,都是JVM-lanugages。
在我看来,Scala 的最强指标是代码是用函数式的方式编写的,它包含对 BigQueryIO
的两个方法调用,这可以是 [=56= 的静态方法] BigQueryIO
本身在 Java 的情况下,或者是在 Scala 中的 object BigQueryIO
上定义的方法,这是该语言中的常见设计模式。
然而,最后的 ;
只有 Java 才需要。
对于阅读代码示例的人来说,这个问题实际上并不重要,因为 Apache Beam(这里似乎使用的是 SDK)是一个 Java 库 - 它可以在 Java 和 Scala。
getFailedInserts
的结果似乎通过调用 .apply
进一步处理。这种风格叫做函数式编程.
这是一种完全不同的编程方法,而不是大多数其他语言中常见的过程编程模式。 (例如,将某些内容存储在变量/一般变量中)
请注意,此示例本身实际上不包含任何函数式编程(例如,高阶函数别名 lambda),但函数式编程风格很明显。
不使用魔法字符串一直被认为是最佳实践,但对于这样的代码示例,他们可能希望代码尽可能简单——因为它已经是单行代码了(尽管有换行符)。
代码示例 Java 使用 Apache Beam 编程模型 (https://beam.apache.org/)
我相信幻灯片中的完整代码在这里: https://github.com/ryanmcdowell/dataflow-dynamic-schema/blob/master/src/main/java/com/google/cloud/pso/pipeline/DynamicSchemaPipeline.java
幻灯片中的代码:
- 尝试将数据插入 table 'events_table'
- 如果它 returns 来自 Big Query API 的暂时性错误(例如 "column 'foo' does not exist"),它会运行 table 突变添加 'foo' 并插入数据再次。
它是一种将灵活的 tables 创建到 Big Query 中的模式,Big Query 是一个预定义的模式列式数据库。