Задать вопрос
Ответы пользователя по тегу SQL
  • Как развернуть колонку набок и в массив (Databricks/Spark)?

    mayton2019
    @mayton2019 Автор вопроса
    Bigdata Engineer
    Сам себе отвечаю.

    collect_list() и explode()

    - две функции которые делают нужные преобразования.

    Но практически - моя постановка изменилась и сейчас сводится к работе с JSON-arrays которые лежат
    в ячейках таблицы. Для них collect/explode мне не подошел. А подошли функции transform и cast.
    Часть из них доступны начиная со Spark 3.1.1 и Databricks 9.1.x-LTS Runtime. Поэтому надо модернизироваться срочно.
    Ответ написан
    Комментировать
  • Какой лучший паттерн для тестирования дао на GO?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно там где танцует Go - там рядышком docker/kubernetes. Тоесть не проблема очень быстро поднять тестовую БД, наполнить ее данными и сразу прогнать все тесты по DAO.

    Иного способа протестировать DAO я думаю не существут. Смысл DAO - доступаться к внешним источникам данных. Если его мокать - то это уже не тестирование DAO а тестирование логики следующего уровня. Бизнес-логики и прочее.
    Ответ написан
    Комментировать
  • Как можно удалить запись в таблице?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данные из таблиц как всегда удаляются через DELETE FROM table ... но если есть ограничения констрейнтов - то надо указать опцию CASCADE.

    Вообще в очень сложных и много-уровневых БД необычайно тяжело что-то удалять. Иногда удаление одной строки вызывает долгий процесс проверки зависимостей. Особенно на массовых удалениях.

    Поэтому учитывая специфику системы я предлагаю вообще не удалять а просто ставить статус. Например если машина угнана, продана или лежит на свалке или разобрана за зап-части - то нужно соотв. Поменять ей владельца или статус.
    Ответ написан
  • Какую книгу прочитать про SQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Изучать SQL как сферический язык в вакууме - нет особого смысла. Особенно если ты спрашиваешь про хинты. Хинты - это опция конкретной реализации DBMS. У Оракла - свои хинты. У Microsoft - свои. И знания между ними - совершенно не переносимые. И сами хинты кажется не стандартизированы в SQL стандарте. Здесь я могу ошибаться - пускай знающие подскажут.

    Вобщем если ты где-то уже работаешь и вы используете конкретную БД - то бери и читай по ней.

    Я в своё время тоже искал теоретическую литературу по оптимизации SQL. Нет толком ничего. Есть Ден Тоу. Настройка SQL для профессионалов. Он пытается подогнать под оптимизацию свою теорию. Считает селективности и кардинальности для суб-запросов и рисует "облачки" - диаграммы пытаясь вывести формулу cost. Но это всё не работает. Это разбивается о практику. Ни одна практика Oracle/PG/MSQL/MySQL не подрверждает эффеткивности диаграмм Тоу. Вобщем я зря потратил время на чтение этой книги. И тебе не советую.

    Бери конкретные книги от вендора и по ним смотри.

    И в твоём вопросе не хватает еще одного хеш-тега.
    Ответ написан
    Комментировать
  • Делаю changelog на pgsql выходить ошибка, как решить?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Что за вертикальная палочка? Зачем она?

    ALTER TABLE sl.lesson {
        DROP CONSTRAINT lesson_timetable_id_fkey |
        DROP COLUMN timetable_id
    }


    А это что?
    liquibase.exception.ValidationFailedException: Validation Failed:


    Изменял change-sets грязными руками? Этого нельзя делать. То что установлено в репо - маркируется контрольной суммой и нельзя фиксить задним числом. Создаёшь новый changeset который исправляет.
    Ответ написан
    Комментировать
  • При решении каких задач может пригодится команда CROSS JOIN (SQL)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Везде где нужны комбинации объектов из двух коллекций. Пример из программирования - два вложенных цикла по коллекциям.
    Ответ написан
    1 комментарий
  • Почему sql-оператор IN (в WHERE) плох с точки зрения оптимизации?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данный вопрос никак не решается в scope знаний об чистом языке SQL.
    Здесь надо смотреть конкретную DBMS (Postgres/MySQL) и смотреть какой она выбрала план.

    Более того. Знания о том как сработал Postgres нам не дают никакой подсказки о том как это сработает
    в других системах.
    Ответ написан
    Комментировать
  • Как автоматизировать выполнение sql-запросов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вам определенно нужен девопс который автоматизирует вам выполнение ваших скриптов по календарю. Добавит дашборды с графиками и прочее.

    DataGrip насколько я понимаю это среда разработки. Тоесть она активна пока у вас крышка ноутбука отрыта. Закрыли - всё. Капец все планам.

    Поэтому девопс и еще раз девопс.
    Ответ написан
    Комментировать
  • Можно ли пользоваться Ajax с помощью SQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Как всегда говорим о сферическом SQL... (ворчу)

    Обычно так не делают. Просто БД предоставляет слишком много доступа для ползователя. Тут надо решать вопросы и SQL инжекций и инфобезопасности. А то так любой дурак сделает 'drop database' просто получив в руки браузер.
    Ответ написан
    Комментировать
  • Как сравнить по времени в таблицах, отбросив минуты и секунды до часов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У Оракла есть короткий синтаксис внутренних соединений. Вообще JOIN не нужно указывать.

    SELECT 
      t1.ID, t1.TIME
    FROM 
      t1,t2 
    WHERE t1.ID = t2.ID
      AND trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24')

    И есть общая рекомендация - выделять ключевые слова SQL в uppercase. Так их удобнее видеть.
    Ответ написан
    Комментировать
  • Как написать команду SQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    SELECT 
     `user_id`, `username`, `first_name`,`last_name`, `title` 
    FROM 
     `userdata` 
    WHERE 
     `type` LIKE '%group'
    Ответ написан
    Комментировать
  • IDE для СУБД. В чём работать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не приживаются они для СУБД.

    IDE-шки. Вот такие дела. Редко когда тебе нужно открывать в Oracle PLSQL Developer десяток PLSQL пакетов.

    Так вообще вместо IDE используют IDE основного языка программирования. В нем и пишут текст. Тем более что 99% он инкапсулирован в ORM.

    Попробуй на сайте JetBrains скачать что-то. И еще DBeaver был. Там удобно каталоги баз вести.
    Ответ написан
    Комментировать
  • При удалении из массива, удаленный элемент дублируется и остается в массиве?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Работает другая ветка "if"
    Ответ написан
    Комментировать
  • Можно ли оптимизировать запрос?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно использовать inline views (или еще называют common table expressions)

    with cp_view as (
     select cp.chat_id
     from chat_participants cp
     where cp.user_id = 1 and cp.is_deleted = false)
    .....
    Ответ написан
  • Как определить, в какой ситуации оптимальнее использовать подзапросы, а не соединения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут нечего думать. Смотрите что показывает explain plan и меряйте время отклика.

    SQL как язык - это чистая теория. То есть известен результат но неизвестно каким способом конкретная dbms его достигает. Операция explain будет зависеть от выбора dbms (Oracle, Postgres e.t.c) и будет по разному показывать реализацию алгоритма выборки для каждого select.

    Спрогнозировать как будет выглядеть план сложно. Даже разные версии Oracle к примеру могут показать разный план на одном тексте запроса.
    Ответ написан
    Комментировать
  • Как выбирать последующие записи в SQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно помнить о том что между вычитыванием 1-й и 2-й страницы таблица могла быть изменена. И процесс может либо пропустить какую-то строку либо прочитать дубликат. У этой проблемы есть много решений. Почти все они лежат в плоскости транзакций. Но поскольку тема тегирована только SQL - то непонятно с какой dbms мы имеем дело. Реализация режимов транзакций - вещь крайне нестандартизированная.

    Тоесть чтобы обсуждать правильный pagination нам нужно понять что по ту сторону application. Oracle? MSSQL? e.t.c.
    Ответ написан
    Комментировать
  • Как с помощью ORM сделать запрос на готовую базу данных Nest JS?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У тебя - в тексте вопроса - какая-то страшная путаница. Наверное подключаться надо не к NestJS а к MySQL с помощью TypeORM.

    Вот тут есть пример с подключением https://docs.nestjs.com/recipes/sql-typeorm#sql-typeorm

    И разберись с терминологеий. Нельзя ж так набрасывать просто слова.
    Ответ написан
  • В чем ошибка sql-запроса?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У меня в Postgres вот так работает.
    CREATE table courses
    (id INT PRIMARY KEY,
    faculty VARCHAR(55) NULL,
    number INT NULL);

    Кстати. Бывают разные диалекты SQL. И где-то вместо varchar используется text или string.

    Вообще надо указывать тип БД который используется.
    Ответ написан
    Комментировать
  • На сколько правильно разбить один запрос на три более маленьких?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если ты разбиваешь 1 запрос на 3 мелких - то тебе нужно оборачивать их транзакцией или доказывать что между запросами не будет посторонних модификаций данных. Иначе 3 запроса не будут эквивалентны первому. Это кстати типичная джуниорская ошибка - неучет ACID.
    Ответ написан
  • Попадает время в промежуток между двумя time или нет?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут надо сначала смысл разобрать. Вот как ты себе понимаешь что магазин открылся в 22.00 а закрылся в 5.00 ?
    Закрылся в 5.00 утра следующего дня? Работал всего 7 часов. Это один кейс. А другой кейс - если свапнуть время - то получается что работал 15 часов. Выводы? Свапать нельзя никак.

    А вот когда смысл проверки мы поймем - тогда можно и код писать. В крайнем случае - хранимую функцию написать.
    Ответ написан