代码之家  ›  专栏  ›  技术社区  ›  Nikolay Baranenko

通过CSV从Oracle复制到Vertica:丢失行

  •  1
  • Nikolay Baranenko  · 技术社区  · 7 年前

    我试图通过CSV文件将数据从Oracle加载到Vertica

    为从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)
    

    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 卸载40000行

    哪里会有问题,如何解决?

    1 回复  |  直到 7 年前
        1
  •  0
  •   James W.    7 年前

    • 不支持的解析器选项
    • 正在加载数据的表的数据类型不正确
    • 缺少分隔符

    如果哪怕只有一行被拒绝,您也可能希望整个加载失败,为此,请使用可选参数ABORT ON ERROR

    您可能需要限制允许的被拒绝行的数量。使用REJECTMAX设置一个阈值,在该阈值之后,您希望COPY回滚加载过程。

    • 什么都不做。Vertica自动保存被拒绝的数据文件和 每个被拒绝行的随附解释(例外情况),以 名为CopyErrorLogs的目录子目录中的文件。

    • 异常参数(文件将保存在运行脚本的机器上)。
    • 将拒绝的数据保存到表中。使用表可以查询
      数据被拒绝,原因是什么。然后,您可以修复任何不正确的数据,并且

    Vertica建议将被拒绝的数据保存到一个表中,该表将在一个位置包含被拒绝的数据和异常。在COPY语句中使用rejected data AS table reject\U table子句将被拒绝的数据保存到表中很简单