У меня есть несколько таблиц в Mysql, которые должны быть загружены в Teradata, я использую здесь файловый подход. Это означает, что я экспортирую Mysql таблицы в файл разделителя и те файлы, которые я пытаюсь загрузить в терадату. Вопрос / ясность, которых я ожидаю, заключается в том, что мы поддерживаем хранимую процедуру Mysql для извлечения данных из таблиц, эту хранимую процедуру я использую в сценарии python для извлечения данных таблицы. Хорошо / оптимально использовать хранимую процедуру. Поскольку для получения списка таблиц, периода хранения, базы данных и других деталей я создаю один курсор для извлечения данных из одной таблицы, и снова мне нужно создать другой курсор для вызова хранимой процедуры.
- Это дорогостоящая операция в mysql создании курсора.
- Вместо таблицы для получения списка таблиц, срока хранения, базы данных и других деталей, стоит ли сохранить их в плоском файле.
Пожалуйста, поделитесь своими мыслями.
import sys
import mysql.connector
from mysql.connector import MySQLConnection, Error
import csv
output_file_path='/home/XXXXXXX/'
sys.path.insert(0, '/home/XXXXXXX/')
from mysql_config import *
def stored_proc_call(tbl):
print('SP call:', tbl)
conn_sp = mysql.connector.connect(host=dsn,database=database,user=username,passwd=password,allow_local_infile=True)
conn_sp_cursor = conn_sp.cursor(buffered=True)
conn_sp_cursor.callproc('mysql_stored_proc', [tbl])
output_file = output_file_path + tbl + '.txt'
print('output_file:', output_file)
with open(output_file, 'w') as filehandle:
writer = csv.writer(filehandle, delimiter='\x10')
for result in conn_sp_cursor.stored_results():
print('Stored proc cursor:{}, value:{}'.format(type(result), result))
for row in result:
writer.writerow(row)
#print('cursor row', row)
# Allow loading client-side files using the LOAD DATA LOCAL INFILE statement.
con = mysql.connector.connect(host=dsn,database=database,user=username,passwd=password,allow_local_infile=True)
cursor = con.cursor(buffered=True)
cursor.execute("select * from table")
for row in cursor:
print('Archive table cursor:{}, value:{}'.format(type(row), row))
(db,table,col,orgid,*allvalues)=row
stored_proc_call(table)
#print('db:{}, table:{}, col:{}, orgid:{}, ret_period:{}, allvalues:{}'.format(db,table,col,orgid,ret_period,allvalues))
#print('db:{}, table:{}, col:{}, orgid:{}, ret_period:{}, allvalues:{}'.format(db,table,col,orgid,ret_period,allvalues))