所以,我有一個在下面創建的表 nba_schedule。當我嘗試從 s3 csv 檔案復制資料以使用 COPY 插入到表中時,我收到此錯誤InternalError_: Cannot COPY into nonexistent table newsletter_schedule。
我想這是因為這一切都發生在同一個交易中,這就是我在這里要做的。此外,redshift 變數位于 env 檔案中,我不會共享加載該檔案的代碼。
redshift_table = 'nba_schedule'
# Connect to redshift
conn_string = "dbname={} port={} user={} password={} host={}".format(
redshift_dbname, redshift_port, redshift_user, redshift_password, redshift_host)
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
logging.info("Creating newsletter_schedule table in Redshift")
sql = f"""DROP TABLE IF EXISTS {schema "." redshift_table}"""
cursor.execute(sql)
sql = f"""CREATE TABLE IF NOT EXISTS {schema "." redshift_table} (
Date DATE,
Player_Name VARCHAR(255),
Player_Nickname VARCHAR(13),
Player_No VARCHAR(13),
Points VARCHAR(255),
Rebounds VARCHAR(255),
Assists VARCHAR(255),
Blocks VARCHAR(1),
3PM VARCHAR(1),
3PA VARCHAR(1),
FGM VARCHAR(50),
FGA VARCHAR(255),
three_percent VARCHAR(50),
fg_percent VARCHAR(50)
)
"""
cursor.execute(sql)
sql =f"""
COPY newsletter_schedule
FROM 's3://random_sample_data/nba_redshift/{s3_file}'
CREDENTIALS 'aws_iam_role=arn:aws:iam::4254514352:role/SampleRole'
DELIMITER ','
IGNOREHEADER 1
EMPTYASNULL
QUOTE '"'
CSV
REGION 'us-east-1';
"""
cursor.execute(sql)
conn.commit()
有什么想法嗎?
uj5u.com熱心網友回復:
我的第一個想法是 CREATE TABLE 具有顯式定義的模式,但 COPY 命令沒有定義模式,只是表名。現在我不知道您正在使用什么架構,也不知道該用戶在 Redshift 上的搜索路徑是什么,但您似乎應該檢查這不僅僅是架構搜索路徑問題。
如果在 COPY 命令中使用 schema.table 會發生什么?(這個除錯路徑比描述如何評估用戶的搜索路徑更容易解釋)
還有其他更微妙的方式可能會發生這種情況,但我已經學會了首先查看簡單的原因——它們更容易排除,而且往往不是根本原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/378531.html
