一个运行redshift查询的简单库!

redshift-quer的Python项目详细描述


红移查询

imageimageimage

简介

这是一个非常简单的库,它通过 redshift.GetClusterCredentials API调用,然后与集群建立连接并运行提供的SQL语句,一旦完成,它将关闭连接并返回结果。在

当您想在CLIs中或基于事件(例如在AWS Lambdas上或在常规 基于AWS的Glue Python Shell作业。在

使用

虽然redshift_查询可以用作库,但也可以用作它自己的独立脚本。在

它需要以下参数作为环境变量或传递给函数的参数dict中的键提供:

  • 数据库名称:数据库名称。您也可以通过db_name参数将其提供给函数。在
  • DB_USER:要从中请求凭据的用户。您可以选择通过db_user参数将其提供给函数。在
  • CLUSTER iu HOST:红移集群的主机名。您可以选择通过cluster_host参数将其提供给函数。在
  • CLUSTER_ID:集群的ID。您可以选择通过cluster iu id参数将其提供给函数。在
  • SQL_语句:要运行的SQL语句。您可以选择通过sql_statements参数将其提供给函数。 这个参数将用传递给它的事件对象格式化(通过string.format)。 这样,您就可以将SQL语句基于传递给函数的事件,这很有用 因为当您有一个Lambda并且它被事件源调用(例如S3)。在
  • REDSHIFT_QUERY_LOG_LEVEL:默认设置为ERROR,不记录任何内容。通常情况下,错误不会被记录并冒泡,因此它们会使脚本崩溃。 如果设置为INFO,它将记录查询的结果,如果设置为DEBUG,它将记录发生的每一件事情,这有利于调试为什么它被卡住。在

通过AWS SAM和Lambda部署

下面是一个在S3中写入新清单时复制到表的示例:

AWSTemplateFormatVersion:'2010-09-09'Transform:AWS::Serverless-2016-10-31Resources:Function:Type:AWS::Serverless::FunctionProperties:CodeUri:./redshift_query/redshift_query.pyHandler:redshift_query.queryRuntime:python3.8VpcConfig:SecurityGroupIds:'sg-12312312'SubnetIds:'sub-123123'Policies:-Version:'2012-10-17'Statement:-Effect:"Allow"Action:"redshift:GetClusterCredentials"Resource:"arn:aws:redshift:eu-west-1:123123123:dbuser:test/master"# https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-role-permissions.htmlEvents:S3:Type:ScheduleProperties:Bucket:mybucketEvents:s3:ObjectCreated:*Filter:S3Key:Rules:-Name:suffixValue:.manifestEnvironment:Variables:CLUSTER_ID:'test'CLUSTER_HOST:'test.j242tj1qkjuz.eu-west-1.redshift.amazonaws.com'DB_NAME:'test'DB_USER:'master'SQL_STATEMENTS:|-copy customerfrom {Records[0]['s3']['object']['key']}iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'manifestLOG_LEVEL:DEBUG

用作库

要直接使用库,只需以snake_case格式提供参数:

^{pr2}$

如果你用红移_查询.query在代码中可以多次使用红移_query.set_配置要设置静态配置一次:

importredshift_queryredshift_query.set_config({'db_name':'test','db_user':'master','cluster_host':'test.j242tj1qkjuz.eu-west-1.redshift.amazonaws.com','cluster_id':'test'})redshift_query.query({'sql_statements':'''        copy customer            from 's3://mybucket/cust.manifest'            iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'            manifest;     '''})

如果您想担任角色或提供您自己的凭据,也可以选择提供boto\u会话:

importredshift_queryimportboto3redshift_query.query({'boto_session':boto3.session.Session(profile_name='production'),'sql_statements':'select 1;'})

作为CLI

$ DB_USER=neshat DB_NAME=test CLUSTER_ID=test CLUSTER_HOST=test.3j232jjqji21.eu-west-1.redshift.amazonaws.com SQL_STATEMENTS='select 1;' REDSHIFT_QUERY_LOG_LEVEL=DEBUG redshift_query
DEBUG:redshift_query:Passed Event: {}
DEBUG:redshift_query:Passed this_config with added defaults: {'db_name': 'test', 'db_user': 'neshat', 'cluster_host': 'test.3j232jjqji21.eu-west-1.redshift.amazonaws.com', 'cluster_id': 'test', 'sql_statements': 'select 1;', 'boto_session': None}
DEBUG:redshift_query:Received Credentials
DEBUG:redshift_query:Connected
DEBUG:redshift_query:Running select 1
INFO:redshift_query:Statement "?column?
--------
       1
(1 row)" result:

学分

此包是用创建的 Cookiecutteraudreyr/cookiecutter-pypackage 项目模板。在

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

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener