Google cloud platform GCP/Python:将csv从配置单元导入到CloudSQL时捕获subprocess.popen()中的实际错误
我在GNU/Linux3.10和GCP上安装了Python3.6.8,我正在尝试将数据从Hive加载到CloudSQLGoogle cloud platform GCP/Python:将csv从配置单元导入到CloudSQL时捕获subprocess.popen()中的实际错误,google-cloud-platform,hive,subprocess,google-cloud-sql,popen,Google Cloud Platform,Hive,Subprocess,Google Cloud Sql,Popen,我在GNU/Linux3.10和GCP上安装了Python3.6.8,我正在尝试将数据从Hive加载到CloudSQL gc_cmd_import_csv_p1 = subprocess.Popen(['gcloud', 'sql', 'import', 'csv', '{}'.format(quote(cloudsql_instance)),
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脚本而不是
HTTPError 403:
错误。如何捕捉?
请注意:没有HTTP错误提示的身份验证问题。因此,在与GCP管理员进行长时间讨论后,我们发现了该问题 我们尝试使用
os.system()
执行相同的导入命令,然后再次出现HTTP错误。管理员随后重新查看了GCP IAM文档,并为P-SQL用户创建了一个角色。问题现在解决了