While mssql: MS SQL Server и T-SQL
Содержание
сервер sql — SQL в то время как цикл 60 секунд?
Задавать вопрос
спросил
Изменено
2 года, 2 месяца назад
Просмотрено
43к раз
Я в основном пытаюсь захватить команды sql и их время ожидания для ЦП, и я просто хочу запустить цикл while в течение 60 секунд и вставить все данные во временную таблицу. Я не очень хорошо разбираюсь в курсорах или в том, как это сделать в sql.
НАЧИНАТЬ СОЗДАТЬ ТАБЛИЦУ #DiagTable ( идентификатор сеанса NVARCHAR (МАКС.), имя_базы_данных NVARCHAR (МАКС.), время начала NVARCHAR (МАКС.), cmd NVARCHAR (МАКС), стат NVARCHAR (МАКС.), время процессора NVARCHAR (МАКС.), общее прошедшее время NVARCHAR (MAX), читает NVARCHAR (МАКС), пишет НВАРЧАР (МАКС), [запрос] NVARCHAR (МАКС) ) ОБЪЯВИТЬ @id INT ЗАЯВИТЬ x КУРСОР ДЛЯ ВЫБЕРИТЕ 60 ОТКРЫТЬ х ВЫБЕРИТЕ СЛЕДУЮЩИЙ ОТ x В @id ПОКА @@FETCH_STATUS = 0 НАЧИНАТЬ ЗАДЕРЖКА ОЖИДАНИЯ '000:00:01' -- начать цикл здесь ВСТАВИТЬ В #DiagTable ВЫБЕРИТЕ a. session_id, db_name (a.database_id) КАК db_name, a.start_time, команда, статус, a.cpu_time, a.total_elapsed_time, а. читает, а. пишет, b.text AS-запрос ОТ sys.dm_exec_requests ВНЕШНЕЕ ПРИМЕНЕНИЕ sys.dm_exec_sql_text (a.sql_handle) b ГДЕ a.session_id > 50 -- отфильтровать фоновые задачи AND a.session_id @@spid -- отфильтровать этот сеанс запроса ЗАКАЗАТЬ ПО a.cpu_time DESC; ЗАДЕРЖКА ОЖИДАНИЯ '00:00:01' ВЫБЕРИТЕ СЛЕДУЮЩИЙ ОТ x В @id КОНЕЦ ЗАКРЫТЬ х ОСВОБОДИТЬ х -- конец цикла здесь ВЫБЕРИТЕ * ИЗ #DiagTable; УДАЛИТЬ ТАБЛИЦУ #DiagTable; КОНЕЦ
не уверен, что я хочу выбрать 60…
- sql-сервер
5
Чтобы выполнять скрипт каждую секунду в течение одной минуты, вы можете сделать что-то вроде этого
DECLARE @i INT = 1; ПОКА (@i <= 60) НАЧИНАТЬ ЗАДЕРЖКА ОЖИДАНИЯ '00:00:01' /*Ваш скрипт*/ НАБОР @i = @i + 1; КОНЕЦ
Я бы добавил еще один столбец во временную таблицу #DiagTable Session INT
и добавил значение @i в этот столбец, чтобы отслеживать записи, вставленные каждым петля
.
-- Здесь ваш код -- ждать задержки '00:00:01' 60
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
Как выполнить цикл for или while в Databricks SQL
спросил
Изменено
1 год, 8 месяцев назад
Просмотрено
9к раз
Кто-нибудь знает, как написать цикл for или while в SQL в Databricks? Я пробовал много вариантов следующего кода типа SQL Server, но, похоже, ничего не работает. Я тоже не могу найти ссылку на него. Я бы предпочел не делать этого в PySpark, так как мне нужно передать вывод в дополнительный код SQL.
DECLARE @Counter INT УСТАНОВИТЬ @счетчик=1 ПОКА ( @Counter <= 10) НАЧИНАТЬ PRINT 'Значение счетчика = ' + @Counter УСТАНОВИТЕ @Счетчик = @Счетчик + 1 КОНЕЦ
Будем признательны за любые советы.
Спасибо.
- sql
- циклы
- цикл for
- цикл while
- блоки данных
2
Databricks SQL поддерживает только базовые запросы SQL. Таким образом, запросы, ориентированные на процедуры, не поддерживаются в текущей версии Databricks SQL. Это подпадает под новый запрос функции.
Примечание : Databricks SQL предоставляет простой интерфейс для пользователей SQL, которые хотят выполнять быстрые специальные запросы к своему озеру данных, создавать несколько типов визуализации для изучения результатов запросов с разных точек зрения, а также создавать и совместно использовать
приборные панели. Он не должен заменять рабочие нагрузки ETL, работающие в Python/PySpark, которые мы сейчас обрабатываем.
для этого просто перетащите все таблицы из SQL в фрейм данных и используйте сбор, чтобы получить каждую таблицу в фрейм данных:
# импортировать необходимые библиотеки импорт ОС из pyspark. sql.functions импортировать udf, col из pyspark.sql.types импортировать IntegerType # получить список таблиц из SQL, для синтаксиса MySQL вы можете использовать просто SHOW TABLES df_tables = spark.read.jdbc(url=os.environ['SQL_JDBC_URL'], таблица="""(ВЫБРАТЬ * ОТ СИСТЕМНЫЕ ОБЪЕКТЫ ГДЕ xtype = 'U') x""") # функция регистрации определение create_df (таблица): globals () [таблица] = spark.read.jdbc (url = os.environ ['SQL_JDBC_URL'], таблица = таблица) вернуть глобальные()[таблица].count() # для каждого имени из списка таблиц создать кадр данных с помощью функции для значения в df_tables.select("name").collect(): create_df (значение ['имя'])
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.