Cloudera Impala INVALIDATE METADATA 表列表

Cloudera Impala INVALIDATE METADATA list of tables

我正在使用 pandas 和 pyodbc 从 CDH6 Impala 中提取数据。 table 每天和每隔一天摄取一次,我需要进入并手动使几个 table 上的元数据无效。我一直在尝试使用 Python 自动执行此操作,让代码遍历列表中的每个 table。但是由于我们用语句检索了一个 None 类型的对象,所以迭代不起作用。

有什么想法吗?

import pyodbc
import pandas as pd

connString = 'connection string'

tables = ["INVALIDATE METADATA master.table1", "INVALIDATE METADATA master.table2" etc]

for t in tables:
    if tables != None:
        try:
            pd.read_sql_query(tables, con=pyodbc.connect(connString, autocommit=True))
        except:
            print('Unsuccessful')
    else:
        if tables is None:
            pd.read_sql_query(tables, con=pyodbc.connect(connString, autocommit=True))
            print('Success with none')

我认为您可以轻松地实现自动化。我更喜欢使用 pyodbc。

  1. 首先使用show tables in schema获取表格列表。
  2. 遍历列表,创建无效元数据语句并发出它。
import pyodbc

connp = pyodbc.connect(conn_string, autocommit=True)
cursor = connp.cursor()
#Create SQL to fetch all tables from schema_xx. You can use argument instead of schema_xx too.
sql = "show tables in schema_xx"  
cursor.execute(sql)

for row in cursor.fetchall():
      #Create and execute invalidate metadata statement one by one
      sql ="INVALIDATE METADATA schema_xx."+row[0]
      cursor.execute(sql)

connp.close()

您不需要迭代所有表。对于当前架构; “使元数据无效”语句使该架构上所有表的元数据无效。