SQLMorph将传统SQL方言转换为现代SQL方言。此工具批量运行翻译。

sqlmorph-api的Python项目详细描述


如何使用SQLMorph

使用SQLMorph应用程序有两种主要方法,这两种方法都需要通过您的phData account进行身份验证:

如果您只需要运行几个查询,UI将是最简单、最友好的工具。但是,如果您有许多查询,并且希望跨目录(递归地)运行批处理作业,或者希望通过其他脚本化进程运行单个文件,SQLMorph还有一个python脚本可以完成此任务。

使用Python脚本

为了与脚本交互,您必须从UI检索auth令牌。这可以通过导航到UI中的api页面并单击Copy Auth Token按钮来完成。

脚本要求:

  • Python3

在任何时候,如果您想查看脚本的参数,可以使用python3 -m sqlmorph_api --help运行命令,它将打印以下内容:

usage: sqlmorph_api.py [-h] [--url URL] [--debug] --source {mssql,hana,teradata,oracle,impala,netezza,snowflake} --target {impala,snowflake,hana,oracle} --auth-token AUTH [--input INPUT] --output OUTPUT [--db-url DB_URL] [--db-schema DB_SCHEMA] [--db-table DB_TABLE]

Utility for scripting access to the SQLMorph Api

optional arguments:
  -h, --help            show this help message and exit
  --url URL             SQLMorph API Url
  --debug               Run the CLI in debug mode

required arguments:
  --source {mssql,hana,teradata,oracle,impala,netezza,snowflake}
                        Source dialect
  --target {impala,snowflake,hana,oracle}
                        Target dialect
  --auth-token AUTH     Okta Access Token
  --input INPUT         File or directory to translate
  --output OUTPUT       Output directory path

database arguments:
  --db-url DB_URL       Database connection to translate directly from a database. The string is in Oracle EZConnect format USER/PASSWORD@//hostname:port/service_name
  --db-schema DB_SCHEMA
                        Schema in database to interrogate. Wildcards can be post-fixed with %
  --db-table DB_TABLE   Table in database to interrogate. Wildcards can be post-fixed with %

从这个输出可以看出,脚本需要四个输入参数,您可以选择将脚本指向除生产环境之外的其他环境。url标志默认为production,不需要更改。下面是几个命令示例:

  • 针对单个文件翻译
    • python3 -m sqlmorph_api --source impala --target snowflake --auth-token <REDACTED_TOKEN> --input statement.sql --output result/
  • 根据目录翻译
    • python3 -m sqlmorph_api --source impala --target snowflake --auth-token <REDACTED_TOKEN> --input sql-scripts --output result
    • 上面的命令将获取输入目录,遍历目录中的每个文件,运行转换,然后在输出目录中创建与输入目录相同的文件夹结构。新目录中的每个文件都将有目标转换结果。所有错误将在脚本末尾打印到stdout。在
  • 根据Oracle数据库进行翻译
    • python3 -m sqlmorph_api --source oracle --target snowflake --auth-token <REDACTED_TOKEN> --db-url="HR/XXXXX@//oracle-hostname:1521/ORCL" --db-schema HR --db-table "%" --output result
    • 上面的命令将查询oracle数据库中HR模式中的每个表。输出目录将包含一个包含源sql和翻译sql的目录。在

当python脚本运行时,stderr会进行大量日志记录。如果您想使其静音,可以将stderr重定向到/dev/null

Oracle

连接到Oracle需要cx_Oracle包。安装这个库的最简单方法是Python轮子。因此,首先安装wheel包,然后安装cx_Oracle包:

^{pr2}$

然后安装Oracle Instant Client:

注意:在MacOS上,似乎包含了即时客户端,因此可能不需要执行此步骤。

  1. 下载Oracle Instant Client。在
  2. 解压缩并放在适当的目录中。例如C:\oracle\instantclient_19_9
  3. 配置python以查找即时客户端安装。例如在Windows上SET PATH=C:\oracle\instantclient_19_9;%PATH%。有关其他操作系统,请参阅cx_Oracle documentation。在
  4. 运行SQLMorph egpython3 -m sqlmorph_api --source oracle --target snowflake --auth-token <REDACTED_TOKEN> --db-url="HR/XXXXX@//oracle-hostname:1521/ORCL" --db-schema HR --db-table "%" --output result

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

推荐PyPI第三方库


热门话题
java操作数组上的字符串   java JAXB内容未实例化   图形在Java中如何绘制垂直居中的字符串?   java Apache Ant:使用Junit时出现NoClassDefFoundError   java无法从服务器上运行perl脚本   如何在java中沿树进行预排序遍历,并打印0和1以对应每个节点上的特定字符?   java如何创建。p12文件?   java线程访问无效   java只匹配命名空间中的XML节点,而不知道NS前缀   从java获取2d arraylist元素   数组Java动态集合对象   java Xpath通过通配符或布尔运算查找以相同名称开头的节点?   java注释元素类型   java在中看不到Super()。反编译后的类文件