Как удалить временные таблицы, созданные в снежинке - PullRequest
0 голосов
/ 23 января 2020

Я загружаю данные через ODI во временные таблицы типа «снежинка», созданные с помощью c $, после успешной загрузки необходимо удалить, как удалить эти временные таблицы, оцените ваше предложение

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Если вам все еще нужно это, я написал хранимую процедуру, которая будет принимать список SQL, сгенерированный динамически, и выполнять строки по одной за раз. Вы можете использовать его для запуска любого списка сгенерированных операторов SQL, полученных в результате запроса select, включая удаление всех таблиц, соответствующих шаблону, например c $%. Во-первых, вот хранимая процедура:

create or replace procedure RunBatchSQL(sqlCommand String)
returns string
language JavaScript
as
$$
/**
 * Stored procedure to execute multiple SQL statements generated from a SQL query
 * Note that this procedure will always use the column named "SQL_COMMAND"
 *
 * @param {String} sqlCommand: The SQL query to run to generate one or more SQL commands 
 * @return {String}: A string containing all the SQL commands executed, each separated by a newline. 
 */
      cmd1_dict = {sqlText: SQLCOMMAND};
      stmt = snowflake.createStatement(cmd1_dict);

      rs = stmt.execute();

      var s = '';

      while (rs.next())  {
          cmd2_dict = {sqlText: rs.getColumnValue("SQL_COMMAND")};
          stmtEx = snowflake.createStatement(cmd2_dict);
          stmtEx.execute();
          s += rs.getColumnValue(1) + "\n";
          }

      return s;

$$

Вы можете использовать эту хранимую процедуру для запуска любых динамически генерируемых операторов SQL в пакетном режиме, используя следующий скрипт. Запустите самый верхний запрос, и будет очевидно, что будет выполнять хранимая процедура с этим тестом запроса в качестве параметра:

-- This is a select query that will generate a list of SQL commands to execute in batch. 
-- This SQL will generate rows to drop all tables starting with c$. With minor edits
-- you could limit it to a specific database or schema.
select 'drop table ' || TABLE_CATALOG || '.' || TABLE_SCHEMA || '.' || "TABLE_NAME" as SQL_COMMAND
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like 'c$%';

-- As a convenience, this grabs the last SQL run so that it's easier to insert into 
-- the parameter used to call the stored procedure. 
set query_text = (  select QUERY_TEXT
                    from table(information_schema.query_history(result_limit => 2))
                    where SESSION_ID = Current_Session() and QUERY_TYPE = 'SELECT' order by START_TIME desc);

-- Confirm that the query_text variable has the correct SQL query to generate our SQL commands (grants in this case) to run.
select $query_text;

-- Run the stored procedure. Note that to view its output better, double click on the output to see it in multi-line format,
Call RunBatchSQL($query_text);

--Check the last several queries run to make sure it worked.
select QUERY_TEXT
from table(information_schema.query_history(result_limit => 100))
where SESSION_ID = Current_Session() order by START_TIME desc;
1 голос
/ 24 января 2020

Рабочие таблицы с префиксом C$ являются продуктом использования ODI, но они не создаются как фактические Снежные временные таблицы , поэтому они не получают преимущества от автоматического удаления c на JDB C завершение сеанса.

Издатели ODI отмечают о своих C$ и I$ рабочих таблицах:

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

Для неудачный сценарий ios при использовании ODI, который может привести к появлению оставшихся таблиц в Snowflake, следуя приведенной выше ссылке, вы сможете запустить процедуру удаления остатков рабочих таблиц (вручную или по расписанию). Для удобства скопируйте соответствующую процедуру здесь:

Чтобы запустить процедуру:

  • Откройте ODI Studio и подключитесь к репозиторию ODI BI Apps.
  • Перейдите на вкладку «Дизайнер» и с помощью навигатора перейдите к: BI Apps Project -> Components -> DW -> Oracle -> Clean Work and Flow Tables папке
  • . В папке найдите пакет «Чистая работа и таблицы потоков», и в этом пакете находится сценарий UTILITIES_CLEAN_WORK_AND_FLOW_TABLES.
  • Право щелкните сценарий и выберите «Выполнить». В ответ на приглашение укажите go нужное количество дней до удаления таблиц
.
...