无法在 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 中的表格上写字的主要内容,如果未能解决你的问题,请参考以下文章