Примеры sql: основные операторы, виды, синтаксис, написание, создание базы данных, примеры простых и сложных команд
Содержание
Примеры — Учебник SQL — Schoolsw3.com
❮ Назад
Далее ❯
Синтаксис
Выберите все записи из таблицы («Customers»)
Объяснение примера
SELECT
Выберите имя клиента, город из списка клиентов
Выбрать все записи из таблицы («Customers»)
Объяснение примеров
SELECT DISTINCT
Выберите отдельную страну из списка клиентов
Выберите количество (отдельных стран) из числа клиентов
Выберите количество (всех) в качестве отдельных стран из числа клиентов
Объяснение примеров
WHERE
Выберите все из таблицы («Customers»), страну Мексика
Выберите из всей таблицы, первого клиента
Объяснение примеров
AND, OR и NOT
Выберите из всей таблицы, клиента из страны и города
Выберите из всей таблицы, клиента из страны и из двух городов
Выберите из всей таблицы, клиентов, но не из данной страны
Выберите из всей таблицы, клиентов из страны или двух городов
Объяснение примеров
ORDER BY
Выберите из всей таблицы, страны по алфавиту
Выберите из всей таблицы, страны по алфавиту в обратном порядке
Выберите из всей таблицы, страны по алфавиту и имена клиентов
Объяснение примеров
INSERT INTO
Вставить в таблицу строку
Вставить данные в строку
Объяснение примеров
Значение NULL
Вставить столбцы в таблицу с NULL
Вставить столбцы в таблицу без NULL
Объяснение примеров
Обновление
Обновить таблицы
Обновить несколько записей
Обновить несколько (если опустить WHERE, то все записи будут обновлены)
Объяснение примеров
DELETE
Удалить из таблицы запись
Удалить из таблицы все записи
Объяснение примеров
SELECT TOP
Выберите из таблицы лучших 3 клиентов
Выберите из таблицы три строки
Выберите из таблицы лучших 50 процентов из всех клиентов
Выберите из таблицы лучших 3 клиентов из страны
Объяснение примеров
MIN() и MAX()
Выберите минимальную цену из продуктов
Выберите максимальную цену из продуктов
Объяснение примеров
COUNT, AVG() и SUM()
Выберите количество продуктов
Выберите среднее количество продуктов
Выберите сумму продуктов
Объяснение примеров
LIKE
Выделите все строки таблицы, начинающиеся с «a»
Выделите все строки таблицы, заканчивающиеся на «a»
Выделите все строки таблицы, которые имеют «or» в любой позиции
Выделите все строки таблицы, которые имеют «r» во второй позиции
Выделите все строки таблицы, которые начинаются с «a» и заканчиваются «о»
Выделите все строки таблицы, которые не начинаются с «a»
Объяснение примеров
Подстановочный знак
Использование подстановочного знака %
Использование подстановочного знака _
Использование подстановочного знака []
Использование подстановочного знака [!]
Объяснение примеров
IN
Выберите все из списка клиентов страну в
Выберите все из списка клиентов страну не в
Объяснение примеров
BETWEEN
Выберите из продуктов, где цена будет между 10 и 20
Выберите из продуктов, где цена будет не между 10 и 20
Выберите из продуктов, где цена будет между 10 и 20 и не соответствует id (1,2,3)
Выберите из продуктов, между, по порядку названия продукта
Выберите из продуктов, не между, по порядку названия продукта
Объяснение примеров
Псевдонимы
Выберите идентификатор клиента в качестве идентификатора, имя клиента в качестве клиента от клиентов
Выберите имя клиента как клиент, имя контакта как [контактное лицо] от клиентов
Выберите идентификатор заказа, дату заказа, имя клиента
Объяснение примеров
Соединение
Внутренние соединение к клиентам по заказам
Соединение слева к клиентам по заказам
Соединение справа к клиентам по заказам
Соединение личности к клиентам по заказам
Объяснение примеров
UNION
Союз клиентов и поставщиков
Союз всех клиентов и поставщиков
Союз клиентов и поставщиков, где страна
Союз всех клиентов и поставщиков, где страна
Объяснение примеров
GROUP BY
Выберите количество стран по группам
Выберите количество стран с группировкой по порядку
Выберите количество стран с группировкой с соединением
Объяснение примеров
HAVING
Выберите количество стран от клиентов по группе имея количество
Выберите количество стран от клиентов по группе имея количество по заказам
Объяснение примеров
EXISTS
Выберите имя поставщика от поставщиков, где существует
Объяснение примера
ANY и ALL
Выберите название из продуктов, где идентификатор продукта любой
Выберите название из продуктов, где идентификатор продукта все
Объяснение примеров
INSERT INTO SELECT
Вставить и выбрать название поставщика из списка поставщиков
Вставить и выбрать название поставщика из списка поставщиков, где страна
Объяснение примеров
CASE
Выберите случайное количество из заказа
Выберите случайный заказ
Объяснение примеров
Комментарии
Комментарий однострочный
Комментарий однострочный в конце строки
Комментарий многострочный
Объяснение примеров
База данных
Учебники по базам данных SQL можно найти здесь:
SQL Создать новую базу данных
SQL Откинуть базу данных
SQL Резервная база данных
SQL Создать новую таблицу
SQL Откинуть таблицу
SQL Изменить таблицу
SQL Ограничения
SQL Не нулевые значения
SQL Уникальность
SQL Первичный ключ
SQL Внешний ключ
SQL Проверять
SQL По умолчанию
SQL Индекс
SQL Автоматическое приращение
SQL Даты
SQL Представление
SQL Инъекция
SQL Принимающий
Онлайн — Сертификация SchoolsW3
Идеальное решение для профессионалов, которым необходимо сбалансировать работу, семью и карьерный рост.
Уже выдано более 25 000 сертификатов!
Получите ваш сертификат »
HTML Сертификат документ на ваши знания HTML.
CSS Сертификат документ на ваши знания новейших CSS.
JavaScript Сертификат документ на ваши знания JavaScript и HTML DOM.
Python Сертификат документ на ваши знания Python.
jQuery Сертификат документ на ваши знания jQuery.
SQL Сертификат документ на ваши знания SQL.
PHP Сертификат документ на ваши знания PHP и SQL (MySQL).
XML Сертификат документ на ваши знания XML, XML DOM и XSLT.
Bootstrap Сертификат документ на ваши знания Bootstrap фреймворк.
❮ Назад
Далее ❯
Интерактивные SQL-примеры на JavaScript
Читать про SQL хорошо, но пробовать запросы вживую еще лучше! Поэтому я разработал виджеты, которые помогут вам превратить статичные SQL-запросы в статьях в интерактивные примеры.
Вот рабочий пример, попробуйте его:
select * from employees limit 5;
А вот четыре шага, которые помогут настроить интерактивные примеры в ваших статьях или документации:
1.
Подключите зависимости
Вам понадобится три JavaScript-файла:
sqlite3.js
— SQLite, скомпилированная для браузера.sqlime-db.js
— веб-компонент базы данных.sqlime-examples.js
— веб-компонент интерактивных примеров.
Подключите их через CDN или (предпочтительно) скачайте и разместите локально:
<script src="https://unpkg.com/@antonz/[email protected]/dist/sqlite3.js"></script> <script src="https://unpkg.com/[email protected]/dist/sqlime-db.js"></script> <script src="https://unpkg.com/[email protected]/dist/sqlime-examples.js"></script>
Если выбрали локальный вариант, придется еще скачать WebAssembly-файл SQLite:
https://unpkg.com/@antonz/[email protected]/dist/sqlite3.wasm
sqlite3.wasm
неявно используется скриптом sqlite3.js
, так что разместите их в одном каталоге.
Я советую держать SQLite локально, потому что она весит ≈1Мб, а CDN часто подвисают на таких больших файлах.
Все файлы можно установить через npm
:
npm install @antonz/sqlite npm install sqlime
Примечание.
@antonz/sqlite
— это копия официальной сборки SQLite Wasm. Я завернул ее в npm-пакет для удобства, но если хотите — используйте оригинальную сборку с сайта SQLite.
2. Напишите статью, как делаете это обычно
Допустим, вы пишете небольшую заметку о ранжировании данных в SQL:
<p>Для ранжирования данных в SQL используют оконную функцию <code>rank()<code>:</p> <pre>select rank() over w as "rank", name, department, salary from employees window w as (order by salary desc) order by "rank", id;</pre> <p>статья продолжается...</p>
Отображается как обычный HTML:
Для ранжирования данных в SQL используют оконную функцию rank()
:
select rank() over w as "rank", name, department, salary from employees window w as (order by salary desc) order by "rank", id;
статья продолжается. ..
3. Загрузите базу данных
Вы можете создать базу из бинарного файла БД SQLite или SQL-скрипта. Я выбрал второй вариант и использую employees.sql, который создает таблицу employees
и заполняет ее данными.
Загрузите базу с помощью компонента sqlime-db
:
<sqlime-db name="employees" path="./employees.sql"></sqlime-db>
name
— название базы, по которому будем обращаться к ней в дальнейшем.path
— URL, по которому доступен SQL-скрипт (или бинарный файл) базы.
4. Активируйте примеры
Осталось только превратить SQL-запросы из обычных элементов pre
в интерактивные примеры. За это отвечает компонент sqlime-examples
:
<sqlime-examples db="employees" selector="pre.example" editable></sqlime-examples>
db
— название базы, которую мы загрузили раньше.selector
— CSS-селектор для элементов, которые содержат SQL.editable
— разрешает редактировать код примеров (если убрать, можно будет только запускать).
Готово!
Для ранжирования данных в SQL используют оконную функцию rank()
:
select rank() over w as "rank", name, department, salary from employees window w as (order by salary desc) order by "rank", id;
статья продолжается…
sqlime-examples
преобразует все элементы с указанным селектором, так что достаточно добавить его на страницу только один раз (кроме случаев, когда у вас несколько групп примеров, которые работают с разными базами данных).
Итого
Интерактивные SQL-примеры отлично подходят для любой документации:
- более информативные, чем статические запросы;
- лучше вовлекают читателя и поощряют эксперименты;
- легко настраиваются и не требуют сервера.
Попробуйте добавить интерактива своим статьям, или задайте вопрос на гитхабе, если что-то непонятно.
Подписывайтесь на канал, чтобы не пропустить новые заметки 🚀
Кому принадлежит больше всего объектов. sql Кто-то спросил меня, как использовать SQL, чтобы понять, кому принадлежит больше всего объектов. Ниже приводится последовательность запросов, чтобы пролить свет на эту тему. | СОЕДИНЕНИЕ Группировка |
Объекты разбивки IFS по subdir.sql Кто-то спросил, можете ли вы подсчитать объекты потокового файла по каталогу. Это решение выполняет свою работу и включает также подсчет общего размера. | Группировка Общее табличное выражение |
Подсчет активных пользовательских заданий. Ответ находится ниже, и я включил версию SQL, которая будет работать для всех, кто все еще использует IBM i 7.1 | Группировка |
Как определить, где найти современные службы сбора данных info.sql Если вы хотите автоматизировать анализ служб сбора данных, вы можете использовать этот подход для использования SQL для определения библиотеки, используемой службами сбора данных (CS), и имени элемента в файлах CS, соответствующих текущему дню. | Псевдоним Составной SQL Глобальная переменная |
Проверка данных в файле string.sql В классическом движении «два за вторник» появился еще один вопрос, основанный на строке и встроенной функции. | Перевести |
Извлечение данных из string.sql Язык SQL настолько надежен, что часто существует более одного способа выполнить задачу. В этом Gist я демонстрирую, как извлечь имя пользователя задания из квалифицированного имени задания. | Встроенная глобальная переменная |
Ответили ли мы на вопросы? Используйте этот запрос, чтобы узнать, на какие вопросы сегодня нет ответа. #SQLcandoit | Общее табличное выражение |
Отправка изменений строки в очередь данных с помощью JSON.sql В этом примере показано, как легко собрать службу потоковой передачи данных с помощью SQL, JSON, триггеров и очереди данных. | JSON Скрытые столбцы |
Наведение порядка в IFS.sql В этом примере выбираются файлы потока IFS, найденные в каталоге /tmp и в нем. Сколько грязи скопилось в /tmp и что вы можете сделать, чтобы справиться с этим? Немного SQL в помощь. IFS_OBJECT_STATISTICS() UDTF возвращает множество элементов данных, которые вы можете использовать для улучшения управления IFS. | Динамический SQL Составной SQL VARCHAR_FORMAT |
Извлечение данных SQL DML из Plan Cache.sql У меня был клиент, который спрашивал меня… как узнать, кто выполняет операторы SQL INSERT, UPDATE или DELETE? Существуют различные подходы к этой теме, с лучшими в своем роде ответами, включая поддержку монитора активности базы данных Guardium для Db2 для i. При этом, если вы хотите получить представление об экземпляре, посмотрите на свой кэш планов SQL. (перед IPL, пожалуйста) | СОЗДАТЬ ТАБЛИЦУ КАК Общее табличное выражение |
Views. sql только для чтения Некоторые представления могут использоваться для ВСТАВКИ, ОБНОВЛЕНИЯ или УДАЛЕНИЯ данных в нижележащем физическом файле или таблице SQL. В этом примере показано, как инженер баз данных может создать представление SQL, доступное только для чтения. | Посмотреть |
Очередь заданий закрывается при максимальном количестве активных заданий.sql Как вы управляете своими очередями заданий? У вас есть ограничения на максимальное количество активных заданий? Вот методика изучения этой темы…. | Общее табличное выражение |
Гибкое представление mmpf.sql На недавнем веб-семинаре меня спросили, можно ли создать гибкое представление таким образом, чтобы оно использовало подмножество элементов в физическом файле с несколькими элементами. Это рабочий пример использования глобальной переменной Db2 for i в качестве внешнего элемента управления для такого представления. Обработка элемента инкапсулирована в определяемой пользователем табличной функции… | Псевдоним ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ |
Вычисление значения ALLOCATE для столбца.sql Инженерам баз данных иногда требуется идентифицировать модели данных со столбцами различной длины, в которых можно было бы улучшить предложение allocate. Когда вы используете предложение ALLOCATE(n), вы говорите базе данных установить n байтов для столбца в фиксированной части записи. Если значение столбца для строки имеет длину > n, база данных использует… | Динамическое соединение Общее табличное выражение |
Хранилище пользователей TopN report.sql Этот пример берет предыдущий пример и расширяет его. Идея заключается в том, что вы хотите активно управлять потреблением хранилища пользователями. Для основных потребителей хранилища верните отчет, в котором перечислены их самые большие объекты (либо в QSYS, либо в IFS) и предоставлены некоторые контекстуальные подробности. | VARCHAR_FORMAT Общее табличное выражение |
Владение объектами пользователями — всего report.sql В этой сущности объединены несколько служб IBM i (SQL) для создания простой в использовании UDTF. Передайте имя пользователя, и вы получите обратно все объекты QSYS и IFS, которыми они владеют, в порядке убывания размера. | VARCHAR_FORMAT Общее табличное выражение |
Пользователи ALLOBJ с паролями по умолчанию. Это один из примеров, когда SQL можно использовать вместо команды «Анализ паролей по умолчанию» (ANZDFTPWD). | КАК |
Приемники журналов подключены или нет.sql Меня попросили предоставить способ найти получателей журналов и определить, подключены они или нет. | Общее табличное выражение |
Подсчет объектов в library. sql Часто существует более одного способа кодирования решения. Сегодня меня спросили, как использовать SQL для подсчета количества объектов в библиотеке. Есть два примера… один очень быстрый, но требует IBM i 7.4 | Общее табличное выражение |
Сгенерированный SQL запрос сравнения таблиц SQL, LISTAGG(), QSYS2.SYSCOLUMNS2 и IS NOT DISTINCT объединяются здесь для создания запроса сравнения на уровне таблицы. | Исключение Присоединиться СПИСОК НЕ ОТЛИЧАЕТСЯ |
Маскировка дней рождения с помощью RCAC В этом примере показано, как использовать маску столбца, чтобы пользователи не могли видеть фактическую дату рождения. | МАСКА |
Оптимизация журналируемых файлов базы данных Тонкие параметры журналирования объектов могут сильно повлиять на производительность. | Составной SQL |
Ограничения среды SQL Просмотр основных потребителей ресурсов SQL с момента последней IPL. | Объявленные глобальные временные таблицы, подобные |
Именование из трех частей для UDTF Для пользовательских табличных функций (UDTF) необходимо использовать хитрость. Включите предложение where, единственной целью которого является отправка вызова UDTF в удаленную базу данных! | Именование из 3 частей |
Тайна ZDA раскрыта Этот пример показывает несколько вещей, заслуживающих внимания. Системные менеджеры могут использовать программу выхода для установления улучшенных правил аудита, понимания и бизнес-правил в реальном времени с использованием SQL. Для рабочих мест QZDASOINIT это можно легко считать неразрешимой загадкой. С помощью специальных регистров клиента Db2 for i мы можем многое понять о ZD… | СОЗДАТЬ ТАБЛИЦУ КАК |
dynamic VALUES INTO В этом примере показано, как использовать динамический SQL (PREPARE и EXECUTE) для реализации оператора VALUES INTO. | ЗНАЧЕНИЙ В Динамический SQL |
ОКРУГЛ против КВАЛИФИКАЦИИ Этот пример показывает, что КВАНТИЗАЦИЮ можно использовать вместе с режимом округления с десятичной плавающей запятой для обеспечения программного управления округлением числовых значений. | КРУГЛЫЙ КВАНТИЗ ЗНАЧЕНИЯ |
JSON_TABLE и советы по выживанию для измельчения JSON с помощью SQL В этом примере показано, как преодолеть то, что кажется банальным: веб-службы JSON возвращают недопустимый документ JSON. | JSON_TABLE |
Удалить *IOSYSCFG из пользователей и групп В этом примере показаны возможности встроенной функции REGEXP_REPLACE в сочетании со службами IBM i Services для обеспечения безопасности и динамического SQL. | Динамический SQL Регулярное выражение Общее табличное выражение |
Даты и TIMESTAMP_FORMAT Форматирование данных даты в истинные типы даты и времени | VARCHAR_FORMAT TIMESTAMP_FORMAT |
Получение сведений об активных сеансах 5250. | Общее табличное выражение |
СОХРАНИТЬ историю опции 21 с помощью SQL.sql Используйте SQL для извлечения QUSRSYS/QSRSAV21 *DTAARA и преобразования содержащихся в ней сведений в полезную историю. | TIMESTAMP_FORMAT |
Управление правами доступа к строке для ZDA access.sql Это разрешение строки можно использовать, чтобы запретить определенным именам заданий выбирать данные из определенного файла | Разрешение |
Запрос содержимого буферного файла для определенного пользователя user.sql Какими буферными файлами владеет текущий пользователь? | Общее табличное выражение |
Рекомендации по индексам, связанные с MTI Изучите сводные рекомендации по индексам, в которых с момента последней IPL использовались поддерживаемые временные индексы (MTI) | Общее табличное выражение |
Публикация содержимого файла с использованием JSON и SQL. sql Публикация данных в таблице с использованием SQL | JSON МАССИВ_AGG Динамический SQL Общее табличное выражение |
Удаление шума из текстовых строк с помощью TRANSLATE.sql Удаление шума из текстовых строк с помощью TRANSLATE | ПЕРЕВОД |
Authority Collection.sql Безопасность IBM i DB2 — примеры Скотта по созданию маски — https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzcrtmask.htm | СОЗДАТЬ МАСКУ СОЗДАТЬ РАЗРЕШЕНИЕ |
Индекс меньшего размера приближается к пределу.sql На этой неделе ко мне обратился клиент, потому что он столкнулся с максимальным размером индекса. (ой) У них были некоторые индексы, которые были созданы для использования меньшего максимального размера, чем это возможно для индексов SQL. Этот запрос позволяет им отслеживать, когда их индексы размером не более 4 ГБ вырастают до уровня, когда они превышают 60% от максимального размера. | ROW_NUMBER OLAP Общее табличное выражение |
Крупнейшие используемые сегодня MTI.sql Поддерживаемые временные индексы (MTI)… они есть у всех, но они похожи на строительство дома на песке… ваша основа для производительности не является прочной. Используйте этот Gist, чтобы получить некоторое представление об этой теме! | Латеральная корреляция Общее табличное выражение |
Конец задания и CPF1164 message.sql При запуске задания в журнал истории отправляется сообщение CPF1124. Когда задание завершается, в журнал истории отправляется сообщение CPF1164. Этот пример со встроенными функциями SQL показывает, как SQL может извлекать и преобразовывать маркеры сообщения о завершении задания CPF1164 в полезную форму. | ИНТЕРПРЕТ TIMESTAMP_FORMAT |
Отслеживание пользователей ALLOBJ во времени Идея этого Gist состоит в том, чтобы сделать шаг от доступа к просмотру в реальном времени того, у кого есть специальные права доступа *ALLOBJ, к возможности увидеть, как тема меняется с течением времени. С добавлением измерения времени клиентам будет легче сосредоточиться на дельта-изменениях. | Exception Join Скрытые столбцы Оператор MERGE Аудит столбцов Common Table Expression |
Кухонная раковина для Admin.sql Больше SQL, чем вам нужно… или так много хороших SQL, что вы продолжаете возвращаться? Время покажет. | VARCHAR_FORMAT LISTAGG ROW_NUMBER Оператор Dynamic Compound Псевдоним TIMESTAMPDIFF |
Размеры библиотек и многое другое.sql С группой Db2 PTF SF99703 уровень 22 и Db2 PTF Group SF99704 уровень 10 (также известные как временные улучшения TR9 и TR3), UDTF LIBRARY_INFO имеет необязательные входные параметры для обеспечения более эффективных запросов на конкретные вопросы библиотеки. | RUNSQL ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ VARCHAR_FORMAT |
Ну, разве это не special.sql Меня попросили предоставить пользователю SQL метод доступа к специальным полномочиям, предоставленным профилям пользователей и групп, и вернуть данные в форме, не являющейся списком, для простоты отчетности и анализ. Чтобы выполнить этот запрос, я использовал табличную функцию SYSTOOLS.SPLIT, но должен был быть осторожен, чтобы использовать идеальный разделительный символ (3 пробела), обрезать… | СПЛИТ |
Управление заданиями MSGW.sql Для этого меня попросили предоставить запрос, который найдет задания, которые зависли в состоянии ожидания сообщения (MSGW) более 90 минут. Есть 3 части прогрессии, чтобы достичь решения. | Латеральная корреляция Общее табличное выражение |
Интерактивные пользователи и использование.sql Этот обзор дает представление о том, что возможно при использовании SQL и служб IBM i Services для мониторинга и управления интерактивными пользователями. | Группировка Внутреннее соединение Боковая корреляция |
Управление заимствованными полномочиями.sql Если вы используете заимствованные полномочия, как не допустить, чтобы код, который вы вызываете, воспользовался вашими повышенными полномочиями? Один ответ лежит в этой сути… | УСТАНОВИТЬ АВТОРИЗАЦИЯ СЕССИИ |
Аудит очереди заданий Меня спросили: «Как определить, какой пользователь держал очередь заданий»? Хотя существует несколько подходов к ответу на этот вопрос, вот пример, в котором используется защищенный журнал журнала аудита. | ИНТЕРПРЕТ |
Взгляните на список библиотек Меня спросили, как можно использовать object_statistics с *LIBL и *USRLIBL для получения точных и упорядоченных результатов. Посмотрите на это… | Внутреннее соединение Боковая корреляция |
Защита корня IFS для *PUBLIC Если каталог IFS включает W (запись), вы подвергаетесь атакам вредоносных программ. Используйте это, чтобы просмотреть и преодолеть эту тему для всех важных каталогов ROOT. | REGEXP_REPLACE |
Auditing.sql на уровне строк Меня спросили, как включить детали аудита на уровне строк в таблицы. Хотя временные таблицы со столбцами Generated — это мощная комбинация, в следующем примере демонстрируется другой подход. | Скрытые столбцы Временная метка изменения строки |
SQL DDL с nc.sql SQL DML включает предложение WITH NC, чтобы изменение данных не участвовало в транзакции. SQL DDL не включает предложение WITH NC, но опытный пользователь SQL может использовать процедуру AUTONOMOUS для достижения того же поведения. | Динамический SQL Автономная процедура |
QAPMJOBL.sql Меня спросили, как SQL может преобразовывать данные службы сбора данных, в данном случае данные о производительности труда, в более удобную форму. Встроенные функции SQL и выражения CASE выполняют свою работу. | CASE-выражение TIMESTAMP_FORMAT |
prtprvaut.sql Кто-то прислал мне «Вызов SQL». Вызов принят! #SQLcandoit | Псевдоним Динамический SQL Составной SQL INTERPRET TIMESTAMP_FORMAT VARBINARY_FORMAT |
Employment Days.sql Меня спросили, как SQL может вычислить разницу в количестве дней между двумя столбцами дат, где один столбец может содержать NULL. Встроенные функции timestamp_format и timestampdiff выполняют свою работу с небольшой помощью Coalesce. | ОБЪЕДИНЕНИЕ TIMESTAMPDIFF TIMESTAMP_FORMAT |
QBATCH job study.sql Меня попросили показать, как можно использовать SQL для анализа истории заданий подсистемы QBATCH. Супер группировка спешит на помощь. | CUBE ROLLUP GROUP BY INTERPRET INNER JOIN TIMESTAMPDIFF Common Table Expression |
IFS_search_replace_and_create. sql Меня спросили, как можно объединить ifs_read и ifs_write для создания нового файла потока IFS, в котором заменяются определенные строки символов. | REGEXP_REPLACE |
Коллекция полномочий — разделение в файле repair.sql В этом Gist показано, как можно использовать SQL для упрощения задачи анализа данных полномочий во время выполнения коллекции полномочий. | SPLIT GROUPING RIGHT EXCEPTION JOIN Common Table Expressions |
Извлечение имени файла IFS из абсолютного пути name.sql Запрос был, если у вас есть абсолютный путь, как SQL может извлечь имя файла из пути? Один из подходов приведен ниже. | SUBSTR REGEXP_INSTR REGEXP_COUNT |
Virtually done.sql Включает ли ваша физическая модель данных виртуальный уровень? Если нет, то эта информация для вас… | Динамический SQL |
Альтернатива SQL команде ANZDFTPWD ACTION(*NONE). sql Запрос был, существует ли альтернатива SQL команде ANZDFTPWD ACTION(*NONE)? Ответом было громкое ДА. | ГРУППА |
Сравните содержимое двух буферных файлов.sql Задача была простой… можно ли использовать SQL для сравнения содержимого двух буферных файлов? Решение следует… | UNION ROW_NUMBER EXCEPTION join Common Table Expression |
Поиск в IFS объектов с «log4j» в имени. и создание таблицы SQL с результатами поиска. | RUNSQL СОЗДАТЬ ТАБЛИЦУ КАК |
Использование латеральной корреляции для объединения SQL-сервисов. | ЗНАЧЕНИЯ БОКОВАЯ СОЕДИНЕНИЕ ВСЕ ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ |
Владельцы объектов с exclude author.sql Клиент спросил, как они могут определить, для каких объектов установлено *PUBLIC *EXCLUDE (хорошо!), но где владелец объекта также имеет *EXCLUDE (не очень хорошо). В этом заключается одно решение. | Общее табличное выражение |
Предупреждение о высоком уровне заданий. Решение следует… | Общее табличное выражение |
Ответ на запрос message.sql Запрос… покажите, как SQL может справиться с надоедливым двоичным значением MESSAGE_KEY и ответить на сообщение запроса. | Внутреннее соединение Exception Join Общее табличное выражение |
send_sms.sql Идея… открыть SQL для отправки текстовых (SMS) сообщений. Конечно, эта идея находится в пределах нашего понимания. Полное улавливание идеи подразумевает, что сложность должна быть инкапсулирована. | WRAP HTTP_GET HTTP_POST |
mti_info.sql Идея… обнаружить MTI и заменить их постоянными индексами | Левое внешнее соединение ЗАМЕНИТЬ TIMESTAMPDIFF |
ddm server. sql Запрос… используйте SQL, чтобы определить, был ли активен сервер DDM/DRDA, и если нет, запустите его. | Выражение регистра Выражение общей таблицы |
Найти и прочитать журнал активности SNTP.sql Запрос… найти и запросить самый последний журнал активности SNTP. | HEX HEXTORAW INTERPRET RTRIM Общее табличное выражение |
LOCATE_IN_STRING RTRIM Общее табличное выражение | |
Дефектный PTF Currency.sql PTF должны помочь, а не навредить. Это кредо, цель и ожидание. Но… иногда все идет не так. Эта суть показывает, как использовать SQL для использования предоставленных IBM ресурсов, сравнивать то, что у вас есть локально, и, что наиболее важно, сообщать вам, подвергаетесь ли вы воздействию известных дефектных PTF. | РАЗДЕЛИТЬ RTRIM POSSTR HTTP_GET Предикаты IN и NOT IN Общее табличное выражение |
Используются ли программы в QRPLOBJ. sql Запрос здесь был простым, есть ли активные задания, которые имели объекты в QRPLOBJ в стеке? Решение было немного сложным, потому что работа может закончиться на середине анализа. | ORDER BY GROUP BY Common Table Expression |
Приведение ORDER в VIEW.sql Запрос… изменить Db2 для i, чтобы разрешить ORDER BY при CREATE VIEW. Ну, мы не собираемся этого делать, потому что это нестандартно. Эта суть показывает путь вперед с использованием существующей поддержки. | Представление ORDER BY Динамический SQL ROW_NUMBER OLAP Общее табличное выражение |
Журнал аудита Management.sql Мне задают много хороших вопросов о том, как настроить и отслеживать журнал аудита. Угадай, что? #SQLcandoit | TRIM SPLIT ORDER BY VARCHAR_FORMAT Общее табличное выражение |
Недокументированные службы IBM i UDTFs. sql Много раз поступали такие запросы: Предоставьте альтернативу UDTF для представления SQL для некоторых служб IBM i (SQL). Мой ответ заключается в том, что UDTF уже существуют, иногда они не документированы, и пользователи всегда могут запрашивать напрямую. | LIKE ORDER BY Латеральная корреляция |
Средство проверки столбца с десятичной запятой upper.sql Запрос был таким… Я хочу посмотреть, насколько близки некоторые внутренние идентификационные столбцы к максимизации их максимального значения. Например, счетчик, определенный как DECIMAL(7,0), имеет высокое значение 9 995 000, что указывает на то, что нам нужно вмешаться как можно скорее. | LIKE RPAD ORDER BY CASE выражение Латеральная корреляция Common Table Expression |
Query Supervisor — Hold a job.sql Запрос… показать, как Query Supervisor можно использовать для HOLD работы. Критерии, по которым ситуации заслуживают удержания на работе, оставляем читателю. В примере показано, как QS может реагировать на продолжительный запрос, выданный интерактивным пользователем. | Псевдоним ПОРЯДОК ПО Латеральная корреляция Общее табличное выражение |
db2_to_json.sql Запрос… Можно ли извлечь данные из IBM i в формат JSON с помощью службы Db2? | CAST JSON_OBJECT LISTAGG RTRIM ORDER BY Dynamic SQL |
PTF Cover Letters.sql Запрос… показать, как можно использовать SQL для сужения поля до тех PTF, которые имеют специальные инструкции и возвращают только специальные инструкции. В следующем примере основное внимание уделяется действиям администратора ПОСЛЕ загрузки PTF, но ДО их применения. | LIKE Псевдоним LTRIM RTRIM Динамический SQL |
Примеры запросов SQL | Cloud Logging
Этот документ содержит примеры запросов к записям журнала, которые хранятся в
сегменты журналов, обновленные для использования Log Analytics.
В этих корзинах вы можете выполнять SQL-запросы из
Страница Log Analytics в консоли Google Cloud. Дополнительные образцы см.
образцов логирования-аналитики
и
security-analytics
репозиториев GitHub.
В этом документе не описывается SQL или способы маршрутизации и хранения записей журнала. Для
информацию по этим темам см. в разделе «Что дальше».
Прежде чем начать
Чтобы использовать запросы, показанные в этом документе, на странице Log Analytics ,
замените ТАБЛИЦА именем таблицы, которая соответствует
к представлению, которое вы хотите запросить. Имя таблицы имеет формат
project_ID.region.bucket_ID.view_ID
. Вы можете найти имя таблицы для
просмотр на странице Log Analytics ; запрос по умолчанию для журнала
представление перечисляет имя таблицы в оператореFROM
. Для
информация о том, как получить доступ к запросу по умолчанию,
см. Запрос представления журнала.Перейти к Log Analytics
Чтобы использовать запросы, показанные в этом документе, на
Рабочая область BigQuery SQL * страница, заменить
ТАБЛИЦА с путем к таблице
в связанном наборе данных.
Например, чтобы запросить представление_AllLogs
в связанном наборе данныхmydataset
то есть в проектеmyproject
, установите в этом поле значение
мой проект.mydataset._AllLogs
:Перейти к рабочей области BigQuery SQL
Журналы фильтрации
Запросы SQL определяют, какие строки таблицы обрабатывать, затем они группируются
строки и выполнять агрегатные операции. Когда нет группировки и агрегации
перечислены операции, результат запроса включает строки, выбранные
работа фильтра. Примеры в этом разделе иллюстрируют фильтрацию.
Фильтр по времени
Одним из вариантов фильтрации по времени является использование функции TIMESTAMP_SUB
. Этот
Функция позволяет указать интервал ретроспективного просмотра от текущего времени.
Например, следующий запрос считывает данные за последний час,
сортирует данные по возрастанию метки времени, а затем отображает
самые старые 100 записей:
ВЫБЕРИТЕ отметка времени, имя_журнала, серьезность, json_payload, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), ИНТЕРВАЛ 1 ЧАС) ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
Другим вариантом является использование функции отметки времени
. Следующий запрос
читает все логи, полученные в закрытом временном диапазоне,
а затем отображает 100 самых старых записей:
ВЫБОР отметка времени, имя_журнала, серьезность, json_payload, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ метка времени >= TIMESTAMP("2022-08-25 13:00:00", "Америка/Нью-Йорк") И метка времени <= TIMESTAMP("2022-08-25 17:00:00", "Америка/Нью-Йорк") ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
Дополнительные сведения о фильтрации по времени см.
Функции времени и функции отметки времени.
Фильтр по ресурсу
Для фильтрации по ресурсу добавьте resource.type
ограничение.
Например, следующий запрос считывает данные за последний час, а затем
сохраняет те строки, тип ресурса которых соответствует gce_instance
, а затем сортирует
и отображает до 100 записей:
ВЫБРАТЬ отметка времени, имя_журнала, серьезность, json_payload, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И resource.type = "gce_instance" ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
Фильтр по серьезности
Вы можете фильтровать по определенной серьезности с таким ограничением, как
серьезность = "ОШИБКА"
. Другой вариант — использовать оператор IN
.
и укажите набор допустимых значений.
Например, следующий запрос считывает данные за последний час и
затем сохраняет только те строки, которые содержат поле серьезности , значение которого равно
либо 'ИНФОРМАЦИЯ'
, либо 'ОШИБКА'
:
ВЫБОР отметка времени, имя_журнала, серьезность, json_payload, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И серьезность НЕ NULL И серьезность IN («ИНФОРМАЦИЯ», «ОШИБКА») ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
Предыдущий запрос фильтрует по значению поля серьезности
. Однако,
вы также можете писать запросы, фильтрующие числовое значение серьезности журнала.
Например, если вы замените строки серьезности
следующими строками,
запрос возвращает все записи журнала с уровнем серьезности не менее УВЕДОМЛЕНИЕ
:
серьезность_номер НЕ НУЛЕВОЕ И серьезность_число > 200
Информацию о перечисляемых значениях см.
LogSeverity
.
Фильтр по имени журнала
Для фильтрации по имени журнала можно добавить ограничение на значение
log_name
или поле log_id
. Поле log_name
включает ресурс
путь. То есть это поле имеет такие значения, как проектов/myproject/logs/mylog
.
9В поле 0926 log_id хранится только имя журнала, например mylog
.
Например, следующий запрос считывает данные за последний час, а затем
сохраняет те строки, где значение в поле log_name
заканчивается на
data_access
, а затем сортирует и отображает результаты:
SELECT отметка времени, имя_журнала, серьезность, json_payload, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И имя_журнала НРАВИТСЯ "%data_access" ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
В предыдущем примере указывается частичное имя и используется
Оператор LIKE
и подстановочный знак %
.
Фильтр по метке ресурса
Большинство отслеживаемых дескрипторов ресурсов определяют метки, которые используются для идентификации
конкретный ресурс. Например, дескриптор экземпляра Compute Engine
включает метки для зоны, идентификатор проекта и идентификатор экземпляра. Когда
запись в журнал записывается, каждому полю присваиваются значения. Следующее
например:
{ тип: "gce_instance" метки: { instance_id: "1234512345123451" project_id: "мой-проект" зона: "us-central1-f" } }
Поскольку тип данных поля labels
— JSON, включая ограничение
например resource.labels.zone = "us-centra1-f"
в запросе приводит к синтаксису
ошибка. Чтобы получить значение поля с типом данных JSON, используйте функцию
JSON_VALUE
.
Например, следующий запрос считывает самые последние данные, а затем сохраняет
те строки, где ресурс является экземпляром Compute Engine,
находится в us-central1-f
зона:
ВЫБРАТЬ отметка времени, имя_журнала, серьезность, JSON_VALUE(resource. labels.zone) зона AS, json_payload, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И resource.type = "gce_instance" И JSON_VALUE(resource.labels.zone) = "us-central1-f" ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
Для получения информации обо всех функциях, которые могут извлекать и преобразовывать JSON.
данные, см. функции JSON.
Фильтрация по HTTP-запросу
Чтобы отфильтровать таблицу, чтобы включить только строки, соответствующие HTTP-запросу
или ответьте, добавьте ограничение http_request IS NOT NULL
:
SELECT отметка времени, имя_журнала, серьезность, http_request, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И http_request НЕ НУЛЬ ЗАКАЗАТЬ ПО отметке времени ПРЕДЕЛ 100
Следующий запрос включает только строки, соответствующие ПОЛУЧИТЬ
или ПОЧТОВЫЙ
запросы:
ВЫБРАТЬ отметка времени, имя_журнала, серьезность, http_request, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И http_request НЕ NULL И http_request. request_method IN ('GET', 'POST') ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
Фильтр по статусу HTTP
Чтобы фильтровать по статусу HTTP, измените предложение WHERE
, чтобы оно требовало
http_request.status 9Поле 0927 должно быть определено:
ВЫБРАТЬ отметка времени, имя_журнала, http_request.status, http_request, ресурс, метки ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И http_request НЕ NULL И http_request.status НЕ НУЛЬ ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 100
Чтобы определить тип данных, хранящихся в поле, просмотрите схему или отобразите
поле. Результаты предыдущего запроса показывают, что
http_request.status 9Поле 0927 хранит целочисленные значения.
Фильтр по полю с типом JSON
Чтобы извлечь значение из столбца с типом данных JSON, используйте функцию
JSON_VALUE
.
Рассмотрим следующие запросы:
SELECT json_payload ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И json_payload.status НЕ НУЛЬ
и
ВЫБОР json_payload ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И JSON_VALUE(json_payload.status) НЕ НУЛЬ
Предыдущие запросы проверяют значение столбца json_payload
; Контент
этого столбца определяется содержанием записи журнала. Оба запроса
отбрасывать строки, не содержащие столбец с меткой json_payload
.
Разница между этими двумя запросами заключается в последней строке, которая определяет
что тестируется против NULL
. Теперь рассмотрим таблицу с двумя строками. В одной
столбец json_payload
имеет следующий вид:
{ положение дел: { время измерения: "1661517845" } }
В другой строке столбец json_payload
имеет другую структуру:
{ @type: "type. googleapis.com/google.cloud.scheduler.logging.AttemptFinished" jobName: "проекты/мой-проект/местоположения/us-central1/jobs/test1" относительный URL: "/food=торт" статус: "НЕ НАЙДЕНО" targetType: "APP_ENGINE_HTTP" }
Обе предыдущие строки удовлетворяют ограничению
json_payload.status НЕ НУЛЕВОЕ
.
То есть результат запроса включает обе строки.
Однако при ограничении JSON_VALUE(json_payload.status) НЕ НУЛЕВОЕ
,
в результат включается только вторая строка.
Фильтр по регулярному выражению
Чтобы вернуть подстроку, соответствующую регулярному выражению, используйте функцию
REGEXP_EXTRACT
. Тип возвращаемого значения этой функции
либо STRING
, либо BYTES
.
Следующий запрос отображает самые последние полученные записи журнала, сохраняет
эти записи с полем json_payload. jobName
, а затем отображает
часть имени, начинающаяся с тест
:
ВЫБОР метка времени, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") Имя AS, ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И json_payload.jobName НЕ НУЛЕВОЕ ЗАКАЗАТЬ ПО отметке времени DESC ПРЕДЕЛ 20
Дополнительные примеры см.
REGEXP_EXTRACT
документация.
Примеры других регулярных выражений, которые
вы можете использовать, см. Функции, операторы и условные операторы.
Запрос, показанный в этом примере, неэффективен. Для совпадения подстроки, например
показано, используйте функцию CONTAINS_SUBSTR
.
Групповые и агрегированные записи журнала
Этот раздел основывается на предыдущих примерах и иллюстрирует, как вы можете
группировать и агрегировать строки таблицы. Если вы не укажете группировку, но сделаете
указать агрегацию, печатается один результат, поскольку SQL обрабатывает все
строки, которые удовлетворяют предложению WHERE
, как единая группа.
Каждое выражение SELECT
должно быть включено в поля группы или агрегировано.
Группировка по времени
Для группировки данных по времени используйте функцию TIMESTAMP_TRUNC
,
который усекает отметку времени до указанной детализации, например MINUTE
. Для
например метка времени 15:30:11
, которая отформатирована как
часы:минуты:секунды
, становится 15:30:00
, когда установлена степень детализации
МИНУТА
.
Следующий запрос считывает данные за последние 10 часов, а затем сохраняет
те строки, где значение Поле json. payload.status
не равно NULL.
Запрос усекает отметку времени в каждой строке по часам, а затем группирует
строки по усеченной отметке времени и статусу:
SELECT TIMESTAMP_TRUNC(отметка времени, ЧАС) КАК час, JSON_VALUE(json_payload.status) статус AS, COUNT(*) КАК считать ОТ ` ТАБЛИЦА ` ГДЕ отметка времени> TIMESTAMP_SUB(CURRENT_TIMESTAMP(), ИНТЕРВАЛ 10 ЧАСОВ) И json_payload НЕ NULL И JSON_VALUE(json_payload.status) НЕ НУЛЬ ГРУППА ПО час,статус ЗАКАЗАТЬ ПО часам ASC
Дополнительные образцы см.
TIMESTAMP_TRUNC
документация.
Для получения информации о других функциях, основанных на времени, см.
Функции даты и времени.
Группировка по ресурсу
Следующий запрос считывает данные за последний час, а затем группирует
строки по типу ресурса. Затем он подсчитывает количество строк для каждого типа,
и возвращает таблицу с двумя столбцами. В первом столбце перечислены ресурсы
тип, а второй столбец — количество строк для этого типа ресурса:
ВЫБОР resource.type, COUNT(*) КАК количество ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), ИНТЕРВАЛ 1 ЧАС) СГРУППИРОВАТЬ ПО resource.type ПРЕДЕЛ 100
Группировка по серьезности
Следующий запрос считывает данные за последний час, а затем сохраняет строки
которые имеют поле серьезности. Затем запрос группирует строки по серьезности и
подсчитывает количество строк для каждой группы:
SELECT серьезность, COUNT(*) AS количество ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И серьезность НЕ НУЛЕВАЯ СГРУППИРОВАТЬ ПО серьезности ORDER BY серьезности ПРЕДЕЛ 100
Группировать по
log_id
Результатом следующего запроса является таблица с двумя столбцами. Первый
столбце перечислены имена журналов, а во втором столбце указано количество
записи журнала, которые были записаны в этот журнал за последний час.
запрос сортирует результаты по количеству записей:
SELECT log_id, COUNT(*) КАК количество ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), ИНТЕРВАЛ 1 ЧАС) СГРУППИРОВАТЬ ПО log_id ЗАКАЗАТЬ ПО КОЛИЧЕСТВУ DESC ПРЕДЕЛ 100
Вычислить среднюю задержку для HTTP-запроса
Следующий запрос иллюстрирует группировку по нескольким столбцам и вычисление
среднее значение. Запрос группирует строки по URL-адресу, содержащемуся в HTTP-запросе.
запросом и значением поля labels.checker_location
. После
группируя строки, запрос вычисляет среднюю задержку для каждой группы:
ВЫБОР JSON_VALUE(labels.checker_location) КАК местоположение, AVG(http_request. latency.seconds) AS сек, http_request.request_url ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И http_request НЕ NULL И http_request.request_method IN ('GET') СГРУППИРОВАТЬ ПО http_request.request_url, местоположение ЗАКАЗАТЬ ПО МЕСТОПОЛОЖЕНИЮ ПРЕДЕЛ 100
В предыдущем выражении для извлечения значения требуется JSON_VALUE
.
из labels.checker_location
поле, потому что тип данных для
меток
- это JSON.
Однако вы не используете эту функцию для извлечения значения из
поле http_request.latency.seconds
. Последнее поле имеет тип данных
целое число.
Вычислить среднее количество байтов, отправленных для теста подсети
Следующий запрос иллюстрирует, как можно отобразить среднее число
байтов, отправленных по местоположению.
Запрос считывает данные за последний час, а затем сохраняет только эти строки.
чей столбец типа ресурса равен gce_subnetwork
и чей json_payload
столбец не NULL. Затем запрос группирует строки по расположению
ресурс. В отличие от предыдущего примера, где данные хранятся в виде числового
значение, значение поля bytes_sent
является строкой, и поэтому вы должны
преобразовать значение в FLOAT64
перед вычислением среднего значения:
SELECT JSON_VALUE(resource.labels.location) AS location, AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) КАК байты ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И resource.type = "gce_subnetwork" И json_payload НЕ НУЛЬ СГРУППИРОВАТЬ ПО местоположению ПРЕДЕЛ 100
Результатом предыдущего запроса является таблица, в каждой строке которой указано местоположение
и среднее количество байтов, отправленных для этого местоположения.
Для получения информации обо всех функциях, которые могут извлекать и преобразовывать JSON.
данные, см. функции JSON.
Информацию о CAST
и других функциях преобразования см.
Конверсионные функции.
Подсчет записей журнала с полем, соответствующим шаблону
Чтобы вернуть подстроку, соответствующую регулярному выражению, используйте функцию
REGEXP_EXTRACT
. Тип возвращаемого значения этой функции
либо STRING
, либо BYTES
.
Следующий запрос сохраняет записи журнала, для которых значение
поля json_payload.jobName
не равно NULL.
Затем он группирует записи по суффиксу имени, который начинается
с тестом
. Наконец, запрос подсчитывает количество записей в каждой группе:
ВЫБОР REGEXP_EXTRACT(JSON_VALUE(json_payload. jobName), r".*(test.*)$") Имя AS, COUNT(*) КАК считать ОТ ` ТАБЛИЦА ` ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И json_payload.jobName НЕ НУЛЕВОЕ СГРУППИРОВАТЬ ПО имени ЗАКАЗАТЬ ПО количеству ПРЕДЕЛ 20
Дополнительные примеры см.
REGEXP_EXTRACT
документация.
Примеры других регулярных выражений, которые
вы можете использовать, см. Функции, операторы и условные операторы.
Поиск по столбцам
В этом разделе описываются два различных подхода, которые можно использовать для поиска
несколько столбцов таблицы.
Поиск на основе токенов
Для поиска в таблице записей, соответствующих набору условий поиска,
используйте функцию ПОИСК
. Эта функция требует два параметра:
где искать и поисковый запрос.
Поскольку функция SEARCH
имеет определенные правила поиска данных,
мы рекомендуем вам прочитать документацию SEARCH
.
Следующий запрос сохраняет только те строки, в которых есть поле
точно соответствует «35.193.12.15»:
SELECT временная метка, log_name, proto_payload, серьезность, resource.type, ресурс, метки ОТ ` ТАБЛИЦА ` AS t ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И proto_payload НЕ NULL И log_name КАК "%cloudaudit.googleapis.com%" И ПОИСК(t,"`35.193.12.15`") ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 20
В предыдущем запросе обратные кавычки заключают в себе искомое значение. Этот
гарантирует, что ПОИСК Функция
ищет точное совпадение между
значение поля и значение между обратными кавычками.
Если в строке запроса отсутствуют обратные кавычки, строка запроса разделяется
на основе правил, определенных в документации SEARCH
.
Например, когда выполняется следующий оператор,
строка запроса разделена на четыре токена: "35", "193", "12" и "15":
ПОИСК(t,"35. 193.12.15")
Предыдущий оператор SEARCH
соответствует строке, когда одно поле
соответствует всем четырем токенам. Порядок токенов не имеет значения.
В запрос можно включить несколько операторов SEARCH
. Например, в
предыдущий запрос, вы можете заменить фильтр по имени журнала на
утверждение, подобное следующему:
SEARCH(t,"`cloudaudit.googleapis.com`")
Предыдущий оператор ищет всю таблицу, в то время как исходный оператор
ищет только столбец log_name
.
Чтобы выполнить множественный поиск по столбцу, разделите отдельные строки символом
пространство. Например, следующий оператор соответствует строкам, в которых поле
содержит «Hello World», «happy» и «days»:
ПОИСК(t,"`Hello World` счастливые дни")
Наконец, вы можете искать определенные столбцы таблицы вместо поиска
весь стол. Например, следующий оператор ищет только
столбцы с именами text_payload
и json_payload
:
SEARCH((text_payload, json_payload), "`35.222.132.245`")
Для получения информации о том, как обрабатываются параметры функции ПОИСК
,
см. справочную страницу BigQuery Функции поиска.
Поиск подстроки
Чтобы выполнить тест без учета регистра, чтобы определить, существует ли значение в
выражение, используйте функцию CONTAINS_SUBSTR
.
Эта функция возвращает TRUE
, когда значение существует и
ЛОЖЬ
иначе. Значение поиска должно быть литералом STRING
, но не
литерал NULL
.
Например, следующий запрос извлекает все записи журнала аудита с
определенный IP-адрес, временные метки которого находятся в определенном диапазоне времени.
Наконец, запрос сортирует результаты, а затем отображает 20 самых старых результатов:
ВЫБОР временная метка, log_name, proto_payload, серьезность, resource.type, ресурс, метки ОТ ` ТАБЛИЦА ` AS t ГДЕ отметка времени > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) И proto_payload НЕ NULL И log_name КАК "%cloudaudit.googleapis.com%" И CONTAINS_SUBSTR(т,"35.193.12.15") ЗАКАЗАТЬ ПО отметке времени ASC ПРЕДЕЛ 20
Предыдущий запрос выполняет проверку подстроки. Таким образом, строка, содержащая
"35.193.12.152" соответствует CONTAINS_SUBSTR 9Заявление 0927.
Что дальше
Для получения информации о маршрутизации и хранении записей журнала см.
см. следующие документы:
- Создание корзины для журналов
- Обновление корзины для использования Log Analytics
- Свяжите сегмент журналов с набором данных BigQuery
- Настройка приемников и управление ими
Справочную документацию по SQL см.