将数据从.gz文件从远程服务器加载到redshift的postgresql实例而不使用S3存储桶?

时间:2016-02-16 23:08:28

标签: python amazon-s3 amazon-redshift

有没有办法将我在远程服务器中的.gz文件加载到redshift数据库表(postgresql)中,而不先在s3存储桶中加载它?

我看到了两个选项: -

    连接到数据库后,
  1. .Update命令。这给了我一个错误"语法错误在程序或附近#34;

  2. 无法在python中找到使用psycopg2库的方法。这是为python编写的代码。

    "copy <tablename> from program "gzip -d <file location in remote server> with delimeter tab '\t' "
  3. 感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用SSH直接从远程主机COPY。出于实际目的,这意味着远程主机需要是* nix机器,而不是Windows。

然而,您仍然需要使用S3来存储清单文件,该文件指定连接详细信息和要运行的命令,例如上面的gzip命令。

文档:COPY from Remote Host (SSH)

答案 1 :(得分:-1)

您可以使用“INSERT”命令。您可以从gzip文件中读取每一行并将其插入表中。这样您就不需要S3存储桶,因为您没有使用“COPY”命令。例如:

with gzip.open('<gzipfile>','r') as l:
for line in l:
    b=line.split('\t') # tab delimited
    # Handling null values
    for k in range(len(b)):
        if b[k]=='\N':
            b[k]=None
    b=tuple(b)
    sql= "INSERT INTO"+ " " + <tablename> + " VALUES (" + ",".join(["?"]*(len(b))) + ")"
    cursor.execute(sql,b)