K0nkere / DL_Dice-detection-project

DnD dice detection with CNN and transfer learning / Project for ML Bookcamp
0 stars 0 forks source link

How to: Clickhouse #19

Open K0nkere opened 1 year ago

K0nkere commented 1 year ago

Управление доступом, создание пользователей, назначение прав

Включение SQL-ориентированного управления доступом

  1. Настройте каталог для хранения конфигураций.

ClickHouse хранит конфигурации объектов системы доступа в каталоге, установленном в конфигурационном параметре сервера access_control_path.

Включите SQL-ориентированное управление доступом как минимум для одного аккаунта.

По умолчанию управление доступом на основе SQL выключено для всех пользователей. Вам необходимо настроить хотя бы одного пользователя в файле конфигурации users.xml и присвоить значение 1 параметру access_management.

  1. Войдите под пользователем default и создайте всех необходимых пользователей. Не забудьте создать аккаунт администратора (GRANT ALL ON . TO admin_user_account WITH GRANT OPTION

Назначение полных прав на default пользователя

GRANT ALL ON *.* TO default WITH GRANT OPTION

Создание нового пользователя и назначение прав на выбранную БД

CREATE USER<user_name> IDENTIFIED WITH plaintext_password BY '<pass_word>'
GRANT ALL ON <database_name>.<database_table> TO <user_name>
K0nkere commented 1 year ago

Чтение и запись в БД в стриминговом режиме

import os
import json
import pandas as pd
import clickhouse_connect

def create_connect(host: str, port:str, username:str, pw: str):
    """
    """
    try:
        connect = clickhouse_connect.create_client(
            host=host,
            port=port,
            username=username,
            password=pw,
        )
        print('Connection to database created')
        return connect

    except:
        print('Failed to create connection to database')
        return None

q = """ select *** from <database> """
connect_read = create_connect(host, port, username, pw)
connect_insert = create_connect(host, port, username, pw)

df_stream = connect_read.query_df_stream(
    q,
    # settings={"session_check": True, "session_timeout":300}
)

insert_context = connect_insert.create_insert_context(table='<table>', database='<database>')

with df_stream:
    for df in df_stream:
       <process df>
       connect_insert.insert_df(df=df, context=insert_context)
K0nkere commented 1 year ago

Удаление дублирующих строк с разным временем по кореллирующему запросу

ALTER TABLE <table_name>
UPDATE _row_exists = 0
WHERE <time_col> IN (
        SELECT MIN(T2.<time_col>)
        FROM <table_name> AS T2
        WHERE pk_id = T2.pk_id
        GROUP BY T2.pk_id

    )
    AND toDate(<time_col>)='2023-07-13'