1. Куча / Говнокод #23454

    0

    1. 1
    2. 2
    echo -ne '10\n11\n12\n' | POST 'http://localhost:8123/?query=INSERT INTO t FORMAT TabSeparated'
    cat file.csv | clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV";

    https://clickhouse.yandex/docs/en/single/index.html#format-clause

    FORMAT

    Вот нахрена было вставлять FORMAT в ЯЗЫК ЗАПРОСОВ? Почему нельзя это сделать опциями клиента и HTTP-хедерами?

    Допустим, хочу я написать клиент на языке X, который использует HTTP-протокол. Работа клиента — взять запрос и превратить его в структуры данных языка X. Из-за этого FORMAT клиенту теперь нужно лезть в пользовательский запрос, чтобы понять, в каком формате будут приходить данные, и уметь конвертировать все форматы, которые взбрело в голову добавить авторам БД.

    Запостил: roman-kashitsyn, 25 Октября 2017

    Комментарии (9) RSS

    • #nosql #etomodno
      Ответить
    • Конвертировать-то зачем, он же напрямую в таком виде стримит по HTTP в сервак. Как там в бинарном протоколе не знаю, но они сами не рекомендуют пока с ним играться.
      Ответить
      • > Конвертировать-то зачем
        Ну вот написал ты либу-клиент на языке Ъ, юзер либы пишет:
        Row r = client.ExecuteQuery("SELECT x, y FROM table LIMIT 1 FORMAT Perfocards")
        Console.FormatLn("x = %s, y = %s", r.GetString("x"), r.GetString("y"))
        Как клиент сможет сконвертировать выхлоп сервера в String? Только посмотрев в FORMAT и выбрав декодер. Аналогично с
        client.Execute("INSERT INTO table FORMAT VHS", {x, y})
        Ответить
        • А ему нужно его конвертировать? Вся эта хуйня была придумана только для удобства стриминга из уже готовых файлов/в промежуточные файлы, если юзер зачем-то указывает формат в селекте, то он должен забирать не результат, а байтовый стрим, и это уже его проблема скармливать корректный запрос в корректный хендлер.
          Ответить
    • В гугле используют кликхаус? Я думал, у вас там свои звездолеты на любой вкус и задачу.
      Ответить
      • Я просто из интереса смотрю, что это за зверь. В гугле свои звездолёты, всё верно.
        Ответить
    • Во многих реляционках есть способы форматирования данных.
      Постгря умеет query_to_xml
      MS-SQL умеет FOR XML

      Зачем?
      Наверное за тем, что бывают очень тонкие клиенты, которые ждут что база отдаст им готовый документ. Это вообще сложный вопрос: можно-ли делать бизнес-логику в базе? Можно-ли делать UI в базе? У всех разные мнения>

      А с чего это кликхаус носкул? Это же вполне себе реляционная субд просто она рид-онли, пропагандирующая длинные денормальизованные таблицы и шустро их джойнящая для репортов
      Ответить
      • > Постгря умеет query_to_xml

        Это не тоже самое. query_to_xml — это функция, она вроде бы не влияет на протокол между клиентом и сервером. Т.е. клиенту не надо смотреть внутрь запроса, чтобы понять, в каком формате придёт ответ с сервера.

        > MS-SQL умеет FOR XML
        Не знаю, насколько это близко, влияет ли наличие FOR XML на протокол. Похоже, что в резалт-сете будет просто одна колонка с xml-строкой на результат. Тоже не понятно, зачем было делать это расширением языка, функция (как в PG) выглядит гораздо логичнее.

        > носкул
        NoSQL = not only sql
        There are no transactions.
        Low requirements for data consistency.

        > рид-онли
        аппенд-онли

        > шустро их джойнящая для репортов
        There is one large table per query. All tables are small, except for one.
        Ответить
        • Ты прав про протокол. И в одном и в другом случае на клиента просто приходит "таблица с колонкой в которой xml".

          >There are no transactions.
          >Low requirements for data consistency.
          MySQL с MyISAM тоже nosql?

          >>аппенд-онли
          ок

          >>There is one large table per query. All tables are small, except for one.
          Да, но её и саму на себя можно джойнить:) Хотя главный юзкейс это, конечно, группировка.
          Ответить

    Добавить комментарий