在阅读正式语言中的表达式时,我习惯于从内到外阅读,即理解子表达式并构建整体。在这个 SQL 片段中:
SELECT
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'TITLE') AS level_id,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'url') AS url
FROM `events_20180725`
WHERE event_name = 'SCI_ERROR'
Run Code Online (Sandbox Code Playgroud)
一个子表达式是
SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'TITLE'
Run Code Online (Sandbox Code Playgroud)
这不是一个普通的子查询:如果我试图自己运行它,我会得到一个错误,因为event_params它不是一个数组。所以看起来
UNNEST 可以与数组以外的东西一起使用。events_20180725外部使用的表有某种绑定,FROM这使得UNNEST子查询内部可以访问它。https://cloud.google.com/bigquery/docs/reference/standard-sql/arrays包含一些示例(在“查询嵌套数组”下),但实际上并未解释语义。这里发生了什么?
运行Docker版本17.06.0-ce,内部版本02c1d87,我有一个看起来像这样的dockerfile:
FROM maven:3.5.2-jdk-8-alpine as builder
RUN chmod -R 777 /root/.m2 &&\
mkdir -p /root/.m2/repository/com/foo/bar &&\
echo "Text" > /root/.m2/repository/com/foo/bar/baz.txt &&\
ls -R -a -l /root/.m2/repository/com/foo
RUN ls -R -a -l /root/.m2/repository/com/foo
Run Code Online (Sandbox Code Playgroud)
第一个RUN命令成功创建了一个文件,但是第二个命令找不到该文件:
Step 1/46 : FROM maven:3.5.2-jdk-8-alpine as builder
---> 293423a981a7
Step 2/46 : RUN chmod -R 777 /root/.m2 && mkdir -p /root/.m2/repository/com/foo/bar && echo "Text" > /root/.m2/repository/com/foo/bar/baz.txt && ls -R -a -l /root/.m2/repository/com/foo
---> Running in a1c0fd142856
/root/.m2/repository/com/foo:
total 12
drwxr-xr-x 3 root root 4096 Nov 30 13:32 . …Run Code Online (Sandbox Code Playgroud) 在具有可选类型的语言中,您可以使用一个称为orElse或的fn来getOrElse执行此操作:
None.getOrElse(1) == 1
Some(2).getOrElse(1) == 2
Run Code Online (Sandbox Code Playgroud)
即您可以指定一个默认值。在Python中,我发现自己正在编写:
if output_directory:
path = output_directory
else:
path = '.'
Run Code Online (Sandbox Code Playgroud)
getOrElse通话会更干净。搜索orElse和getOrElse会出现逻辑运算符。有合适的Python fn吗?
编辑:getOrElse与三元运算符调用不同,因为这需要您output_directory 两次引用。如果将其替换为复杂的表达式,这将是一个特殊的问题。(在功能样式上非常正常。)
在gcc上调试时,我发现Unicode文字u"????"表示为u"\007\116\015\116\227\137\362\135".哪个有意义 - ?是0x4E07,而八进制中的0x4E是116.
现在在基于Intel的Macbook上的Apple LLVM 9.1.0上,我发现相同的文字不会被处理为相同的字符串,即:
u16string{u"????"} == u16string{u"\007\116\015\116\227\137\362\135"}
Run Code Online (Sandbox Code Playgroud)
从去true到false.我还在使用小端系统,所以我不明白发生了什么.
NB.我不是想使用对应关系u"????"== u"\007\116\015\116\227\137\362\135".我只是想了解发生了什么.