无法在 redshift 中的表格上写字

Posted

技术标签:

【中文标题】无法在 redshift 中的表格上写字【英文标题】:Can not write on a table in redshift 【发布时间】:2019-08-02 12:41:38 【问题描述】:

我正在尝试将文件从 S3 复制到 redshift 表,但我无法这样做。但是,我可以从表格中读取信息,因此我知道我的连接正常。 请帮我找出问题所在。

def upload_redshift():
    conn_string = passd.redshift_login['login'] //the connection string containing dbname, username etc.
    con = psycopg2.connect(conn_string);
    sql = """FROM 's3://datawarehouse/my_S3_file' credentials 'aws_access_key_id=***;aws_secret_access_key=***' csv ; ;"""
    try:
        con = psycopg2.connect(conn_string)
        logging.info("Connection Successful!")
    except:
        raise ValueError("Unable to connect to Redshift")

    cur = con.cursor()
    try:
        cur.execute(sql)

        logging.info("  Copy to redshift executed successfully")
    except:
        raise ValueError("Failed to execute copy command")
    con.close()

我收到了Copy to redshift executed successfully 消息,但我的桌子上什么也没发生。

【问题讨论】:

您需要提供更多信息。直接尝试复制命令(而不是通过python) - 那行得通吗?和 - 你的“复制”命令词在哪里?还 - 提供来自 cur.execute 的输出,例如打印(cur.execute(sql)) 好的,所以在 sqlworkbench 中一切正常,我可以从工作台 crete table 运行复制命令等,但我只能从气流中读取数据 【参考方案1】:

试试下面的,

sql = "copy table_name FROM 's3://datawarehouse/my_S3_file' credentials 'aws_access_key_id=***;aws_secret_access_key=***' csv ;"

另外,尝试在“连接选项卡”下创建连接,并使用带有 aws_access_key_id 和密钥作为变量的 PostgresHook,如下所示,它可以在气流中存储加密的详细信息,

pg_db = PostgresHook(postgres_conn_id='<<connection_id>>')
src_conn = pg_db.get_conn()
src_cursor = src_conn.cursor()
src_cursor.execute(sql)
src_cursor.commit()
src_cursor.close()

另外,您可以使用 s3_to_redshift_operator 运算符并将其作为任务执行,

from airflow.operators.s3_to_redshift_operator import S3ToRedshiftTransfer

T1 = S3ToRedshiftTransfer(
        schema = ‘’,
        table = ‘’,
        s3_bucket=‘’,
        s3_key=‘’,
        redshift_conn_id=‘’, #reference to a specific redshift database
        aws_conn_id=‘’, #reference to a specific S3 connection
    )

【讨论】:

试过没用,我还注意到我不能在数据库上做任何写工作,例如制作表格等,但是读取工作正常 您是否检查了您正在使用的凭据的数据库访问级别? 尝试将其作为任务执行,因为在气流中你有 s3_to_redshift_operator 运算符,下面是示例代码,我也会用同样的方法编辑答案,从气流.operators.s3_to_redshift_operator import S3ToRedshiftTransfer T1 = S3ToRedshiftTransfer(schema = '', table = '', s3_bucket='', s3_key='', redshift_conn_id='', #reference to a specific redshift database aws_conn_id='', #reference to a specific S3 connection )

以上是关于无法在 redshift 中的表格上写字的主要内容,如果未能解决你的问题,请参考以下文章

Redshift - 提取约束

Pentaho DI 无法连接到 AWS Redshift - Amazon 错误 100021

word里怎么再表格里加入斜线,然后写字

使用 COPY 功能自动将数据加载到 Redshift

隧道到红移集群

Python 将数据从 Redshift 加载到 S3