Guest User

Untitled

a guest
Jun 12th, 2021
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.68 KB | None | 0 0
  1. import pandas as pd
  2. import numpy as np
  3. import requests
  4. import pandahouse as ph
  5.  
  6. # путь к большой таблице на 6 млн строк
  7. fPath = "C:\\GA_R\\csv\\"  
  8.  
  9. # грузим таблицу в пандафрейм
  10. GAaud_hist = pd.read_csv(fPath+'GAaud_hist'+'.csv',sep=';', decimal=',')
  11. # добавляем столбец с индексом
  12. GAaud_hist['index'] = np.arange(1, len(GAaud_hist) + 1)
  13.  
  14. print(f'Сформированы датафреймы для заливы в КХ \n {len(GAaud_hist)} ')
  15.  
  16.  
  17. # настройки коннекта к КХ на Hetzner
  18. db = 'GA'
  19. connection_Hetzner = {'host': 'http://xx.xx.xxx.154:8123',
  20.                       'database': db,
  21.                       'user': 'default',
  22.                       'password': 'hDmTNbXqtC0LY'
  23.                       }
  24.  
  25. connection = connection_Hetzner
  26.  
  27.  
  28. # формуруем запрос на создание таблицы в КликХаузе
  29. # вытягиваем все названия и типы столбцов из панды
  30. GAaud = pd.DataFrame(GAaud_hist.dtypes)
  31. # переводим индекс в столбец под названием Index
  32. GAaud.reset_index(level=0, inplace=True)
  33. # в столбце Index каждому значениею добавляем двойную кавычку, так как названия столбцов в КликХаузе должны быть в двойных кавычках
  34. GAaud['index'] = GAaud['index'].apply(lambda x: f'"{x}"')
  35. # словарь соответствия типов данных панды и типов данных КликХауза
  36. types = {'object': 'String', 'int64': 'UInt64', 'float64': 'Float64', 'int32': 'UInt32'}
  37. # переводим названия типов из нотации Питона в нотацию Кликхауза
  38. GAaud = GAaud.replace({0: types})
  39. # составляем строку запроса для КХ из таблицы cnt где теперь содержатся названия столбцов в двойных кавычках и типы данных в этих столбцах для КХ
  40. GAaud['clickhouse'] = GAaud['index'].str.cat(GAaud[0], sep=" ")  # сначала получаем столбец состоящий из двух столбцов чтобы получить название столбца и название типа данных Например: "created" Strina
  41. ch_columns = GAaud['clickhouse'].tolist()  # переводим полученный столбец в список, чтобы потом перевести в строку
  42. ch_columns = "\n,".join(str(x) for x in ch_columns)  # переводим полученный список в строку где элементы списка разделены переносом строки и запятой
  43.  
  44. # Формируем окончательную строку запроса в КХ
  45. comand = 'CREATE TABLE IF NOT EXISTS'  # команда для Кликхауза.
  46. table_name = 'GAaud_hist'  # название таблицы в Кликхаузе
  47.  
  48. ch_query = f'{comand} "{db}"."{table_name}"\n({ch_columns}) \n ENGINE = MergeTree \n ORDER BY ("index")'
  49.  
  50.  
  51.  
  52. # -- удаляем старую таблицу из Кликхауза с данными из прошлой заливки Датасета
  53. ph.execute(query=f'DROP TABLE IF EXISTS "{db}"."{table_name}"', connection=connection)
  54. # выполняем запрос qq
  55. ph.execute(query=ch_query, connection=connection)
  56. # записываем данные из pandas в clickhouse
  57. ph.to_clickhouse(GAaud_hist, table_name, index=False, connection=connection, chunksize=100000)
  58.  
  59. print(f'Конец заливки {db}.{table_name}')
  60.  
Advertisement
Add Comment
Please, Sign In to add comment