问题描述
我在 GCP 上的 GNU/Linux 3.10 上有 python 3.6.8,我正在尝试将数据从 Hive 加载到 Cloudsql。
gc_cmd_import_csv_p1 = subprocess.Popen(['gcloud','sql','import','csv','{}'.format(quote(cloudsql_instance)),'{}'.format(quote(load_csv_files)),'--database={}'.format(quote(cloudsql_db)),'--table={}'.format(quote(cloudsql_table_name)),'--user={}'.format(quote(db_user_name)),'--quiet'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)
import_cmd_op,import_cmd_error = gc_cmd_import_csv_p1.communicate()
import_cmd_return_code = gc_cmd_import_csv_p1.returncode
if import_cmd_return_code:
print("""[ERROR] Unable to import data from Hive to Cloudsql.
Error description: {}
Error Code(s): {}
Issue file name: {}
""".format(import_cmd_error,import_cmd_return_code,load_csv_files))
sys.exit(9)
print("[INFO] Data Import completed from HIVE to Cloudsql.")
如果出现上述任何错误,我会收到如下消息:
Error description: ERROR: (gcloud.sql.import.csv) HTTPError 403: The client is not authorized to make this request.Error Code(s): 1
但是当我实际直接运行相同的导入命令时,如下所示:
gcloud sql import csv test-cloud-sql-instance gs://test-server-12345/app1/data/lookup_table/000000_0 --database=test_db --table=name_lookup --user=test_user --quiet
我收到如下实际错误:
ERROR: (gcloud.sql.import.csv) [ERROR_RDBMS] ERROR: extra data after last expected column CONTEXT: copY name_lookup,line 16902:
我想要这条消息
(最后一个预期列之后的额外数据...第 16902 行:)
在python脚本中显示而不是
HTTP 错误 403:
错误。如何捕捉它? 请注意:没有 HTTP 错误建议的身份验证问题。
解决方法
因此,经过与 GCP 管理员的长时间讨论,我们发现了问题。
我们尝试使用 os.system()
执行相同的导入命令,然后再次出现 HTTP 错误。然后,管理员重新访问了 GCP IAM 文档并为 P-SQL 用户创建了一个角色。问题现已解决。