读取Microsoft SQL Server表数据并上载到BigQuery

migbq的Python项目详细描述


γ-MIGBQ < BR>
rdbms到bigquery数据加载器 < BR>
要求 < BR>
*巨蟒
-cpython 2.7.x公司 < BR>
*关系数据库管理系统(下,分贝)
-Microsoft SQL Server
-mysql(开发) < BR>
*表格规格
-所有表都必须有数字主键字段 < BR>
*数据库用户许可
-选择、插入、更新、创建
-可以访问数据库的元数据([信息架构]数据库)
-在源rdbms中创建一些元数据表
-(如果不想在源代码中创建表,可以使用sqlite。派生此项目并编辑源) < BR>
*谷歌云软件开发工具包
-必须安装google cloud sdk
-https://cloud.google.com/sdk/downloads
-https://cloud.google.com/sdk/gcloud/reference/auth/login < BR>
*pymssql freetds
-http://www.pymssql.org/en/stable/ < BR>
安装 < BR>

导出pymssql_build_with_bundled_freetds=1
pip安装migbq
< BR>
用法 < BR>
写入配置文件 < BR>
*就像embulk(http://www.embulk.org) < BR>
示例 < BR>
通用congif文件
*配置YML < BR> 'BR/''YML 中:
类型:MSSQL
主机:本地主机
用户:用户
密码:密码
端口:1433
数据库:数据库
表格:
-待定
-tbl2
-tbl3
批量:50000
temp_csv_路径:/temp/pymig_csv
temp_csv_path_complete:/temp/pymig_csv_complete/完成 输出:
类型:bigquery
项目:GCP U项目
数据集:bq_数据集
< BR>
Jinja2模板 < BR>
*配置j2.yml
-变量仅为environmant变量。
-文件扩展名是**.j2.yml** < BR> 'BR/''YML 中:
类型:MSSQL
{%包括"mssql connect.yml"%}
表格:
-待定
-tbl2
-tbl3
批量:50000
temp_csv_路径:/temp/pymig_csv
temp_csv_path_complete:/temp/pymig_csv_complete/完成 输出:
类型:bigquery
项目:{{env.gcp_project}
数据集:bq_数据集
< BR>< BR>< B/> >运行 < BR>
(1)执行 < BR> 'Br/''Bash
migbq运行config.yml
< BR>
(2)检查作业是否完成 < BR> 'Br/''Bash
MIGBQ检查配置YML
< BR>< BR>
(3)检查表计数等于 < BR> 'Br/''Bash
migbq sync config.yml
< BR>
*主键基本计数检查。 < BR>
永远运行 < BR>
*您可以添加crontab
*migbq具有独占进程锁。所以你可以每分钟都添加crontab。
*必须同时添加**运行**和**检查** < BR>< BR>
说明 < BR>
运行命令 < BR>
**[1]**选择RDBMS表元数据
-在RDBMS元数据表中获取表主键名。
-获取rdbms元数据表中的列名和类型字段。 < BR>
**[2]**选择RDBMS主键值范围
-获取表的最小/最大pk < BR>
**[3]**选择主键范围内的数据
-选择pk min和min+批量 < BR> 'BR/'` SQL
从tbl中选择*其中0<;idx和idx<;=100;
< BR>
-创建文件**pymig-tbl-idx-1-100**
-gzip csv < BR>
**[4]**将csv文件上传到bigquery
-直接上传到bigquery表。不上传到地面军事系统(可能发生配额超出) < BR>
**[5]**重复1~4次,直到超过最大主键。 < BR>
例如,batch_size:100,max pk是321,然后按如下方式执行rdbms查询。 < BR>< SQL < BR>
从tbl中选择*其中0<;idx和idx<;=100;
从tbl中选择*其中100<;idx和idx<;=200;
从tbl中选择*其中200<;idx和idx<;=300;
从tbl中选择*其中300<;idx和idx<;=400; < BR>< BR>< BR>
< BR>
检查命令 < BR>
*检查bigquery jobid end。
*重试失败作业。 < BR>< BR>
程序日志文件 < BR><乙r/>*在配置文件的子目录[日志]中创建日志文件 < BR> 程序的PID文件 < BR>
*pid文件为unique命令提供唯一的进程。在下面的目录中创建。独占文件锁定。 < BR>< BR>

/TMP
< BR>
加载元数据表 < BR>
元数据:迁移元数据 < BR>
*每次运行"select"时插入一行 < BR>
字段名类型说明示例值等|
-|
tablename string target[tablename]tbl主键|
firstpk integer[tablename]的最小主键值1||
lastpk integer[tablename]的最大主键值123||
currentpk string[tablename]的读取完成主键值20||
regdate datetime此行插入日期2017-11-29 01:02:03||
修改日期日期时间第一个主键,最后一个主键修改日期2017-11-29 01:02:03||
结束日期日期时间当前主键到达最后主键日期2017-11-29 11:22:33||
pkname string[表名]的主键名idx||
rowcnt integer[tablenames]的计数(*)123||
pageTokencurrent string not use now待定||
pageTokenNext字符串现在不使用待定|| < BR>
日志:迁移元数据日志 < BR>
*顺序
-运行:执行'select[tablename]'时向该表插入一行
-运行:创建bigquery jobid时更新此表的行
-检查:当bigquery jobid调用结束时,将行更新为此表的jobcomplete和checkcomplete < BR>
字段名类型说明示例值等|
-|
idx bigint pk 1主键自动递增|
tablename string[tablename]tbl主键|
regdate datetime row insert date 2017-11-29 01:02:03||
结束日期日期时间工作ID"完成"时2017-11-29 11:22:33||
pkname string[表名]的主键名idx||
cnt integer bigquery api:statistics.load.outputrows 123||
pkupper integer每个"select"执行:[pkname]<;=[pkupper]100||
pklower integer每个"select"执行:[pkname]>;[pklower]0||
pkcurrent integer与pkupper 99相同||
jobID string bigquery上传jobID job-adf132f31rf3f||
errorMessage string当jodid检查结果为"error"时,写入此error:bigquery quota exceed||
checkcomplete integer check命令1||
jobcomplete integer check命令jobid check complete。成功=1,失败=1 1||
pagetoken string用作etc||| < BR>< BR>
装货地图 < BR>
*不支持并行加载。 < BR>< BR>< BR>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Requestcontextholder在spring 4中具有并发访问权限。IBMWebSphere上的x Web应用程序?   java如何下载、设置和使用Eclipse?   java如何组合这些mysql语句   java JDBC无法连接到openshift上的mysql数据库   如果存在允许正确处理的重载,java对于方便的方法来说是否可行?   使用hibernate序列的java Spring MVC不存在   具有路径的java Selenium ChromeDriver负载扩展问题   读一本书。java中的java文件   退出队列时,Java队列程序结果为空   Java lambda返回带有重复代码问题的列表   java使用意图从其他活动传递数据并在listview中显示   java如何在java中创建JSON输出   java Android:在不破坏或暂停活动的情况下关闭显示   支持Android电视和手机的java多apk   关于Java应用程序测试和调试的一组问题   如何在JavaSE中使用jdbcRealmShiro进行授权   在java中是否有一个无异常检查的URL解析实用程序?   当页面上有多个相同类型的元素时,java会选择一个特定的元素   递归需要帮助发现java代码中的缺陷