Вставка большого количества строк данных в таблицу cloudsql через PyMySql из .csv - PullRequest
0 голосов
/ 13 апреля 2019

Я новичок в CloudSQL и пытаюсь вставить записи из более 40 различных столбцов и более 1,5 миллионов строк. Однако я не могу сделать это в Google CloudSQL. Я предпринял целый ряд мер, перечисленных ниже, чтобы решить эту проблему, но основная ошибка, которую я получаю:

ERROR:
textPayload:  "2019-04-12T06:10:47.348295Z 8554 [Note] Aborted connection 8554 to db: 'xxxxx_xxx' user: 'root' host: 'x.x.x.x' (Got an error reading communication packets)"  

Резюме:

  1. Я использую Python, PyMySql, чтобы вставить 1,5 миллиона строк данных в таблицу из 35 столбцов
  2. Экземпляр, БД, Таблица уже созданы в CloudSQL.
  3. Конфигурация системы: vCPU - 4, память - 15 ГБ, память на SSD - 10 ГБ
  4. Я могу полностью загрузить эти данные в моей локальной системе.
  5. В Google CloudSQl время развертывания чрезвычайно велико, а развертывание прошло успешно.
  6. Но когда я проверяю свой стол, он пуст.
  7. Журналы ошибок MySql в экземпляре показывают вышеуказанное.

Я пробовал следующие действия:

  • Используя вместо этого API URL / .txt / .json файл для загрузки, теперь используйте .csv.

  • Считая, что это проблема системы, я обновил систему с 8 ГБ памяти до 15 ГБ памяти.

  • Считая, что настройки SQL по умолчанию вызывают ограничения, я добавил следующее:

    • sql_mode: MAXDB, NO_AUTO_CREATE_USER

    • max_allowed_packet: 1073741824

    • net_read_timeout: 4294967295

    • wait_timeout: 31536000

  • Вставлено меньшее количество строк, максимальное количество строк, которое можно вставить = 100

def adddata():
    try:
        conn = pymysql.connect(unix_socket='/cloudsql/' + 'karto-235001:asia-east1:karto', user='xxx', password='xxx', db='xxx')
        cur = conn.cursor()
        insert_ = "INSERT INTO data_table(a, b, c) VALUES (%s, %s, %s)"
        with open('info.csv', newline='') as myFile:
            reader = csv.reader(myFile)
            for item in reader:
                cur.execute(insert_, (item[3], item[4], item[5]))
            conn.commit()
            cur.close()
    finally:
        conn.close()

Я проверил онлайн и внедрил рекомендованные решения CloudSQL и других пользователей переполнения стека. Если кто-то может определить, что я делаю неправильно или есть проблемы с моим кодом или конфигурацией? Большое спасибо.

1 Ответ

0 голосов
/ 24 апреля 2019

Я вижу, что вы хотите загрузить информацию, содержащуюся в файле CSV, используя Python. Вы пытались импортировать напрямую в базу данных? Вы можете следовать инструкциям по ссылке [1].

А пока я попытаюсь повторить ваше дело. Вы также можете проверить правильность установки и конфигурации.

Убедитесь, что ваш экземпляр SQL Cloud и соединение [2] и ваша установка Python [3].

[1]https://cloud.google.com/sql/docs/mysql/import-export/importing#csv
[2]https://cloud.google.com/sql/docs/mysql/connect-compute-engine
[3]https://cloud.google.com/python/setup
...