我正在尝试将一些Oracle DB表迁移到云(Snowflake),我想知道从表创建.csv文件的最佳方法是什么。
我有大约200张桌子,有些桌子超过3000万条记录。我想批量存储数据
答案 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/”)
确定可以重新分区,并进行其他一些优化。