如何使用hive3的acid表实现kimball建模的代理键
1.使用byzer导入2亿条数据
2.byzer将数据写入到hive3
3.在hive中check数据
走到这里条数也对上了
4.我们创建一张customer_test表,使用scd的方式,然后对这张2亿条数据的表进行重刷,查看时间
1 | set hive.support.concurrency=true; |
技术爱好者
走到这里条数也对上了
1 | set hive.support.concurrency=true; |
#阅读 css100 天
1 | div { |
1 | <h3>left to right</h3> |
1 | button { |
1 | div { |
1 | div { |
1 | <form> |
1 | .form-item { |
?
显示帮助h/j/k/l
上下左右滚动网页,滚动范围较小d/u
上下滚动半屏, 如果只用左手,也可以e/d
U/P
上下滚动一屏gg
跳转到最上面,G
跳转到最下面0
跳转到最左边, $
跳转到最右边cs
f
当前页打开链接af
新标签页打开链接,并且跳转gf
新标签页打开链接,不跳转E/R
,B/F
g0/g$
yy
x
X
W
r
ctrl + 6
<</>>
yt
创建新的标签页,不跳转yT
创建新的标签页,并且跳转on
T
S/D
gi
: 跳到第一个输入框i
: 进入文本框选择模式;当有多个时,会类似 f,输入对应的字母聚焦该文本框I
: 选择文本框,并打开 VIM 编辑器zv
: 进入可视模式,并全选指定文本v
: 进入可视模式,通过屏幕中的字母选择位置后,需要再按一次 v 才能选择y
: 复制选择的文字esc``esc
: 两次esc退出可视模式v
: 退出可视模式go
: 在当前页打开t
: 在新页签打开b
: 搜索收藏夹的内容并在新标签页打开;u/;U
: 编辑当前浏览器中的地址/
: 查找n
: 查找下一个N
: 查找上一个
/ + 搜索字符
后,enter
是模糊搜索,ctrl + enter
是精准搜索。比如/code
,enter
后vscode
也可以被搜索到,而ctrl + enter
就不会搜到。
进入可视模式后,使用
*
可以搜索光标所在的单词,也可以使用f/F
搜索,与vim原生一样,f + 单字符
搜索,;/,
重复搜索上/下一个
m
+ any character: 标记当前位置'
+ any character: 跳转回来cf
hjkl
上下左右d/u
上下滚动半屏gg
最上边,G
最下边zH
最左边,zL
最右边J/K
切换左右标签页^
两个标签页来回跳转T
在所有标签页中搜索g0
跳到第一个标签页g$
跳到最后一个标签页t
新建标签页W
移动当前标签到下一个窗口number <</>>
往左往右移动标签页H/L
前进后退可以理解为go input的简写
gi
进入文本选择框,就是input窗口,按tab键切换yv
进入可视模式,并全选指定文本, V
复制整行, y
复制选择的文字, 两次esc
第一次取消选择,第二次退出可视模式yy
复制当前标签页的网址x
关闭当前标签页,X
恢复最近关闭的标签页(推荐cmd + w
)r
刷新当前标签页yt
复制当前的标签页f
后,红色的文字是切换滚动区域,黑色的文字是链接跳转f
当前页打开,F
新建标签页打开(后台)o
在当前页打开, O
新建标签页打开(后台)o + g + space
: 使用 google 搜索o + b + space
: 使用 baidu 搜索o + bi + space
: 使用 bing 搜索o + gh + space
: 使用 github 搜索b
显示搜索框并搜索收藏夹的内容,B
新建标签页打开(后台)ge/gE
当网址是一个搜索引擎时,是编辑搜索关键字,否则编辑当前网址/
查找n
查找下一个N
查找上一个m
标记当前位置gu
gU
cmd + opt + i
打开/关闭开发者工具cmd + opt + c
打开/关闭element控制台cmd + opt + j
打开/关闭console控制台cmd + [/]
切换控制台cmd + k
清空console控制台cmd + p
搜索文件cmd + shift + p
搜索命令由于网上的关于数据质量平台的方案比较少,目前datavines看上去很不错,但是目前这个项目还在起步阶段,有兴趣的话,可以一起参与这个项目共建。
所以笔者暂时先用great_expectations来尝试做质量校验。
1 | // 为了方便控制环境,我这边使用conda 创建python38的环境 |
为了方便,我这边直接使用docker创建一个mysql
1 | # 这里是一个注意点,目前2.0的sqlalchemy还是有些bug的,目前还不能完美支持,请使用1.4.0的版本 |
1 | great_expectations init |
1 | great_expectations datasource new |
连接会自动跳转到一个jupyter notebook
这里需要特别注意一下,不然会报错(object supporting the buffer API required):
我们依次完成对应的配置。最后的结果图:
我们打开文件夹删除掉添加用到notebook
1 | great_expectations suite new |
1 | 这里有一个issue,目前我已经提上去了,还在和官方交流中 |
https://github.com/great-expectations/great_expectations/issues/7030
1 | brew install --cask keycastr |
1 | let context_aware=0 |
注意: blank
字符有空格
、换行
、tab
、回车
等等
D
=== d$
C
=== d$i
S
=== ddi
{
和}
回到上一个或者下一个空行
%
切换对应的括号结束和开始
#
和*
快速切换指针所在的同名单词
d3k
和d3j
向上和向下删除3行
当我们使用G
按钮的时候(这里包括了{number}g
),vim会记录下原来的跳转位置, ctrl
+ i
: 前进, ctrl
+ o
: 后退
m{a-z}
: 标记光标所在的位置,局部标记,只用于当前文件m{A-Z}
: 标记光标所在位置,全局标记,标记之后,退出vim,重新启动,标记仍然有效'{a-z}
: 移动到标记为止的行首''
: 来回切换这次和上次光标所在的位置,不过光标在行首'.
: 移动到上次更改的光标位置的行首。:marks
: 查看所有标记.:delmarks a b
– 删除标记a和b。:delmarks a-c
– 删除标记a、b和c。:delmarks a c-f
– 删除标记a、c、d、e、f。:delmarks!
– 删除当前缓冲区的所有标记。:wq
退出:e!
不保存,强制重新加载:q!
强制退出
h
,j
,k
,l
分别用来上下左右移动
注意:如果是一行换行,j
,k
可能无法移动,使用gj
,gk
H
,M
,L
指针跳转到屏幕上方(Head),中间(Middle)和底部(Lower)zt
将当前行置于屏幕的最上方zz
将当前行置于屏幕的中间zb
将当前行置于屏幕的最下方
ctrl
+ g
显示当前位置ctrl
+ u
/d
向上下滚动半屏ctrl
+ y
/e
向上下滚动一行ctrl
+ b
/f
向上下滚动一屏
gg
返回文章到开头number
+ G
/gg
可以到达指定到行数
i
在指定单词前面
插入,I
在指定当行最前面
插入a
在指定单词后面
插入,A
在指定当行最后面
插入o
在指定行下方插入
,O
在指定行上方
插入s
删除光标所在字符,并进入插入模式cc
删除整行,并进入插入模式
(此处等于S
)。
C
删除光标往后的字符并把输入符号向前移动一个字符,ck
,cl
,ch
,cj
,cb
,ce
,c$
等
ctrl
+[
退出 insert mode
单词
: 字母组成到单词、括号等字串
: 空格、tab
、换行分割的字符
^
将光标移动到行首第一个非blank
字符到位置g_
将光标移动到行末第一个非blank
字符的位置0
将光标移动到行首,包括blank
字符$
将光标移动到行末,包括blank
字符
+
移动下一行的第一个字符-
移动到上一行的第一个字符
e
移动到单词的结尾(从左往右移动)w
移动到单词的开头(从左往右移动)b
移动到单词的开头(从右往左移动)ge
移动到上个单词的结尾(从右往左移动)
E
移动到字串的结尾(从左往右移动)W
移动到字串的开头(从左往右移动)B
移动到字串的开头(从右往左移动)gE
移动到字串的结尾(从右往左移动)
常用组合按键: v
,c
,d
可以与方向移动键做出组合,下面是常用示例cw
删除当前单词并进入insert
模式,会保留下个单词前的空格dw
删除当前单词,不会保留下个单词前的空格ea
在当前单词的结尾处添加d^
删除到行首,光标所在单词不会删除
~
字母转换大小写J
删除换行符,可以使下一行合并上来,nJ
连接后面的 n 行.
记住上一次修改的动作,并重复
>
添加缩进. >>
缩进一个tab,>G
到末尾的所有行缩进
/
向后查找(模糊搜索)?
向前查找(模糊搜索)v/c/d
可以结合/
,?
进行选中和删除范围
*
移动到下一个光标所在单词,可以使用n
或者N
记住上一步到操作,然后继续#
移动到上一个光标所在单词,可以使用n
或者N
记住上一步到操作,然后继续
f{motion}
移动到 motion 到单词上,从左往右。F{motion}
移动到 motion 到单词上,从右往左。同时可以搭配;
和,
可以快速重复上一个动作t{motion}
移动到 motion 到单词之前,从左往右。T{motion}
移动到 motion 到单词之后,从右往左。同时可以搭配;
和,
可以快速重复上一个动作v/c/d
可以结合f
选中/删除到范围都是从当前位置到搜索到的位置
yy
复制当前行,同时还可以推理出yw
复制到下一个单词为止,yk
,yl
,yh
,yj
,yb
,ye
,y$
等
dd
删除当前行,同时还可以推理出dw
删除到下一个单词为止,dk
,dl
,dh
,dj
,db
,de
,d$
等
D
删除光标之后的单词
x
删除光标所在的字符,X
删除光标前的字符
p
在指针后面粘贴,P
在指针前面粘贴
r
替换光标所在的字符,R
逐个替换字符,可以依次修改整个语句
u
撤销,U
撤销当前行的所有操作ctrl
+ r
redo 重做,恢复
v
基于字符的可视化选择V
基于行的可视化选择o
在 v 可视化状态下,可以切换可视区域光标的起始
/终止
位置O
光标移动到选中文本的另一个角落ctrl
+ v
基于块的可视化选择,用于处理多行文本gv
回到上一次选中到选择区域gb
快速选中当前单词,再次按gb
继续往下选择相同的单词,然后可以统一修改
在选中模式下,使用normal A.png就会默认在选中行添加A.png
c
删除选中内容,同时进入 insert 模式A
和I
多行编辑的时候可以使用d
删除选中的文本D
删除选中部分的文本,和d
不同之处在于,既是选中文本中有些字符所在到行没有被选中,删除时也会一并删除y
将选中部分复制到剪贴板p
将剪贴板内容粘贴到光标之后,P
将剪贴板内容粘贴到光标之前u
将选中内容全部改成小写,U
将选中内容全部改成大写>
将选中内容右移一个 tab 键规定的长度<
将选中内容左移一个 tab 键规定的长度
ctrl
+ q
进入多选择模式,可以有多指针
假设光标在你想要移动的那一行上。
上下移动:m
移动
:m +1
– 向下移动1行
:m -2
– 向上移动1行
(请注意,您可以用任何数字replace+1,具体取决于您想要向上或向下移动的行数,即+2会将其向下移动2行,-3会将其向上移动2行)
移动到特定的行
:set number
– 显示号码行(更容易看到你移动到哪里)
:m 3
– 在第三行之后移动行(将3replace为您想要的行)
移动多行:
V
(即Shift – V )并上下移动select器以在VIM中select多行
一旦选中:
并运行上面的命令, m +1
等
[number] d
,c
,y
,text object 是要操作的文本对象,比如单词
w,句子 s,段落 p
i
: 内部a
: 外部
w
: 一个单词, 内部: 单词本身, 外部: 单词本身 + 左右空格, 优先空格W
: 一个字串, 内部: 字串本身, 外部: 单词本身 + 左右空格, 优先空格(
,)
,b
: 一对[],内部: 括号内部, 外部: 括号以及括号内部[
,]
: 一对[],内部: 括号内部, 外部: 括号以及括号内部{
,}
,B
: 一对{},内部: 括号内部, 外部: 括号以及括号内部<
,>
: 一对<>,内部: 括号内部, 外部: 括号以及括号内部t
: html 文本'
: 一对单引号,内部: 括号内部, 外部: 括号以及括号内部"
: 一对双引号,内部: 括号内部, 外部: 括号以及括号内部
反引号
: 一对反引号,内部: 括号内部, 外部: 括号以及括号内部s
: 一个句子,以.!?结尾p
: 一个段落,以空行分隔,内部选中该段落,外部还会选中下面的空行
:reg
查看所有寄存器:[a-z]
重置寄存器到值:[A-Z]
添加值到寄存器
:ls
查看所有打开文件:b
+ n
可以跳转到对应文件:b
+ pre
跳转到前一个文件:b
+ next
跳转到后一个文件:b
+ first
跳转到第一个文件:b
+ last
跳转到最后一个文件:b
+ buffer_name
加上 tab 补全跳转
ctrl
+ w
窗口循环切换
必须先按下ctrl
+ w
:w
window,切换到下一个窗口r
reverse,互换窗口c
close,关闭当前窗口,不能关闭最后一个窗口q
quit 退出当前窗口,如果是最后一个窗口,则关闭 vimo
other 关闭其他窗口:sp
横向分屏:vsp
纵向分屏
公式:: [range]s[ubstitute]/{pattern}/{string}/[flags]
公式中[]
内是可选的,{}
内是必填的
range
表示范围
%
:表示替换全文;number1
,number2
:表示替换number1
行到number2
行;$
表示替换到文件尾部,可以和number
配合,比如number,$
或$,number
;s[ubstitute]
: 表示替换命令,可以简写为s
,全称为substitute
pattern
: 表示被替换的字符,可以输入正则表达式
string
: 表示替换的字符
flags
: 取值有两个:
g
表示全局替换,如果不加g
,默认只替换每行第一个匹配到的字符。c
会弹出对话框,询问是否替换,输入y
表示替换当前字符,n
表示不替换当前字符,a
表示替换所有,q
表示退出,l
flag
一起使用,比如gc
n
统计数量输入命令按回车后即执行替换命令,如果切换到 normal 模式,不执行替换命令,类似预览,可以先预览看看是不是我们要替换的结果,如果是就按回车,否则按
Esc
小知识:当使用可视化模式选择多行又退出可视化后(选择执行完其他命令后 Esc),’< 会跳转到刚才可视化选择的起始位置,’>
会跳转到刚才可视化选择的结束位置
:s/old/new - 用 new 替换当前行第一个 old。
:s/old/new/g - 用 new 替换当前行所有的 old。
:n1,n2s/old/new/g - 用 new 替换文件 n1 行到 n2 行所有的 old。
:%s/old/new/g - 用 new 替换文件中所有的 old。
:%s/^/xxx/g - 在每一行的行首插入 xxx,^表示行首。
:%s/$/xxx/g - 在每一行的行尾插入xxx,$表示行尾。
有替换命令末尾加上 c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上 i 则忽略大小写(ignore)。
q
录制和结束录制宏q[a-z]
选择要保存的寄存器,把录制的命令保存到其中@[a-z]
回放寄存器到一系列命令
ctrl
+ v
选中所有, :normal @a
所有行执行宏
yiw
复制指定单词
viwp
粘贴指定单词
熟练应用.
,他会记住上一次的动作
a
+ $
+esc
使用一次之后,可用.
代替,不要自我重复
减少无关的移动,多使用复合命令
复合命令 | 等效长命令 |
---|---|
C | c$ |
s | Cl |
S | ^C |
I | ^i |
A | $a |
o | A |
O | ko |
f
和t
可以通过;
和,
进行重复和回退
gv
回到上一次选中到选择区域
可视化模式下U
可以把选中内容大写
MaterialApp是一个方便的Widget,它封装了应用程序实现Material Design所需要的一些Widget。一
般作为顶层widget使用。
常用的属性:
Scaffffold是Material Design布局结构的基本实现。此类提供了用于显示drawer、snackbar和底部sheet
的API。
Scaffffold 有下面几个主要属性:
一直以来跨平台的中文字体 CSS 设置都是一件让人很头疼的事情,这个库打包了一些常见字体的名字,希望能覆盖 Windows、Mac 以及 Linux 的常见字体,方便引用。在 font-family 直接支持宋、楷、黑和仿宋之前,我觉得这样一种解决方案依然还是有其存在价值的。
项目地址: https://github.com/zenozeng/fonts.css
1 | npm install fonts.css --save |
或者直接复制他的配置
记录一次jupyterhub不能正确激活conda预设env的问题
1 | conda install nb_conda_kernels |
1 | pip install --user ipykernel |
1 | python -m ipykernel install --user --name pyalink --display-name "pyalink" |
1 | jupyter kernelspec list |
大功告成!!!
我们由UpsertKafkaDynamicTableFactory来观察这个connector的实现
首先我们查看UpsertKafkaDynamicTableFactory的uml类图关系
从上面我们可以看到DynamicTable一般都需要实现具体的DynamicTableSourceFactory和DynamicTableSinkFactory
笔者这次主要写的是upsert_sert所以我们这次主要看DynamicTableSinkFactory的源码。
1 | @Override |
1 | private static void validateSink( |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true