从Oracle数据库表生成.csv文件的最快方法是什么?

时间:2019-01-23 20:27:27

标签: oracle csv

我正在尝试将一些Oracle DB表迁移到云(Snowflake),我想知道从表创建.csv文件的最佳方法是什么。

我有大约200张桌子,有些桌子超过3000万条记录。我想批量存储数据

2 个答案:

答案 0 :(得分:1)

1)基于原始文件大小的更好方法是使用RAW DB文件。

2)如果不是这样,请使用shell脚本(相对较快的utl_file) 示例脚本

import requests

url = url
r = requests.get(url)
response = r.text.replace('\n','')
response = re.sub(r':(\d+):*', r'"\1"', response)

3)按照早期用户之一的建议使用utl_file进行创建 https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:88212348059

问候 费萨尔

答案 1 :(得分:0)

所以我处于从300GB oracle db快速导出CSV并将其存储在S3中进行Spark / Hive分析的情况下,假脱机非常慢,SQL开发人员非常慢。好吧接下来呢?

https://github.com/hyee/OpenCSV

超级快。

另一个快速解决方案(我仍然认为它比上面的慢)将直接使用Spark:

query = "(select empno,ename,dname from emp, dept where emp.deptno = dept.deptno) emp"
empDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:oracle:thin:username/password@//hostname:portnumber/SID") \
    .option("dbtable", query) \
    .option("user", "db_user_name") \
    .option("password", "password") \
    .option("driver", "oracle.jdbc.driver.OracleDriver") \
    .load()
empDF.printSchema()
empDF.show()

# Write to S3
empDF.write().format(“orc/parquet/csv.gz”).save(“s3://bucketname/key/”)

确定可以重新分区,并进行其他一些优化。