【问题标题】:How to insert data in flex table in vertica using python 3如何使用python 3在vertica的flex表中插入数据
【发布时间】:2016-08-16 10:28:08
【问题描述】:

我打算将我的非结构化数据保存在 vertica 的弹性表中。我从客户端接收数据列表(列表中的数据类型可能在每次调用中都不同),我想使用 python 3 将其保存在 vertica flex 表中。 如何做到这一点?

我在 google 上找到了一些东西,但是数据是直接使用 csv 或 json 文件加载到 flex 表中的,而不是以编程方式加载的。我想使用 python 以编程方式保存它。

提前感谢您的帮助-:)

【问题讨论】:

    标签: python vertica


    【解决方案1】:

    我找到了一种使用 python 将数据从列表复制/插入到弹性表(垂直)的方法:

    对于列表

    # for python list
    tempList = list()    
    tempList.append('{ "_id" : "01011", "city" : "CHESTER-APL21", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" }')
    tempList.append('{ "_id" : "01011", "city" : "CHESTER-APL21", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" }')
    cur.copy( "COPY STG.unstruc_data FROM STDIN parser fjsonparser() ", ''.join(tempList))
    connection.commit()
    

    对于 JSON

    # for json file
    with open("D:/SampleCSVFile_2kb/tweets.json", "rb") as fs:
        my_file = fs.read().decode('utf-8')
        cur.copy( "COPY STG.unstruc_data FROM STDIN parser fjsonparser()", my_file)
        connection.commit()
    

    对于 CSV

    # for csv file
    with open("D:/SampleCSVFile_2kb/SampleCSVFile_2kb.csv", "rb") as fs:
        my_file = fs.read().decode('utf-8','ignore')
        cur.copy( "COPY STG.unstruc_data FROM STDIN PARSER FDELIMITEDPARSER (delimiter=',', header='false') ", my_file) # buffer_size=65536
        connection.commit()
    

    【讨论】:

      【解决方案2】:

      Vertica-Python 支持 INSERT INTO。

      除非您需要频繁且非常小的插入,否则将数据写入文件并使用 COPY 很可能会提供更好的性能。如果你通过 python 来做,那还是不符合你的“程序化”的想法吗?

      【讨论】:

      • 谢谢 -:) 这很有帮助,但我也找到了另一种方法。请检查我的答案,让我知道使用这种方法有什么缺点。
      • 是的,“从标准输入复制”会很好用!这可能被认为是不好的做法,因为“复制”是为批量加载而不是频繁和小量插入而设计的,但除非你处于资源和性能是一个大问题的情况下,否则你很好:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2015-05-19
      • 2021-01-07
      相关资源
      最近更新 更多