我尝试通过CSV文件将数据从Oracle加载到Vertica
二手python,
编写了这个脚本,用于从Oracle创建CSV
csv_file = open("C:\DataBases\csv\%s_%s.csv" % (FILE_NAME, TABLE_NAME), "a", encoding = 'utf-8')
for row in cursor:
count_rows += 1
result_inside = {}
row_content = []
for col, val in zip(col_names, row):
result_inside[col] = val
row_content.append(result_inside[col])
result_select_from_oracle.append(result_inside)
file.write(json.dumps(result_inside,
default = myconverter))
writer = csv.writer(csv_file, delimiter = ';', quoting = csv.QUOTE_ALL)
writer.writerow(row_content)
将此COPY CSV脚本写入Vertica
connection = vertica_python.connect( * * conn_info)
cursor = connection.cursor()
with open("C:\DataBases\csv\%s_%s.csv" % (FILE_NAME, TABLE_NAME), "rb") as fs:
record_terminator = '\n')
" %(SCHEMA_NAME, TABLE_NAME), my_file)
cursor.copy("COPY %s.%s from stdin PARSER fcsvparser(type='traditional', delimiter=';', record_terminator='\n')" % (SCHEMA_NAME, TABLE_NAME), my_file)
connection.commit()
connection.close()
经过精细化操作后,我遇到了问题 来自oracle 卸载了40 000行 但是在Vertica 39700行中。
哪里可能有问题以及如何解决?
答案 0 :(得分:0)
COPY语句有两个主要阶段:解析和加载(还有其他阶段,但我们会坚持这两个阶段)。 COPY仅在解析器阶段遇到问题时拒绝数据。那是你最终被拒绝的数据。
解析错误的潜在原因包括:
如果一行被拒绝,您可能希望整个加载失败,为此,使用可选参数ABORT ON ERROR
您可能希望限制您允许的被拒绝行数。使用REJECTMAX设置阈值,之后您希望COPY回滚加载过程。
Vertica为您提供了保存被拒绝数据的选项:
Vertica建议将被拒绝的数据保存到一个表中,该表将在一个位置包含被拒绝的数据和异常。使用COPY语句中的REJECTED DATA AS TABLE reject_table子句将保留被拒绝的数据保存到表中很简单