Postgresql 在DAG中,如何在表中找到列主键并测试是否有空值?

Postgresql 在DAG中,如何在表中找到列主键并测试是否有空值?,postgresql,airflow-operator,data-quality,Postgresql,Airflow Operator,Data Quality,我在DAG中编写DataQualityOperator。 它应该检查红移表中是否有数据。为此,我想检查主列是否包含空值。使用sql,我找到了列主键的名称。如何检查它是否包含空值?这意味着该表在我的情况下不好 class DataQualityOperator(BaseOperator): check_template = """ SELECT a.attname FROM pg_index i

我在DAG中编写DataQualityOperator。 它应该检查红移表中是否有数据。为此,我想检查主列是否包含空值。使用sql,我找到了列主键的名称。如何检查它是否包含空值?这意味着该表在我的情况下不好

class DataQualityOperator(BaseOperator):
        check_template = """
                    SELECT a.attname
                    FROM   pg_index i
                    JOIN   pg_attribute a ON a.attrelid = i.indrelid
                                        AND a.attnum = ANY(i.indkey)
                    WHERE  i.indrelid = 'tablename'::regclass
                    AND    i.indisprimary;
        """

        def __init__ (self,redshift_conn_id = "", target_table="", *args, **kwargs):
             super(...)  

        def execute(self, context):
            self.log.info(f'DataQualityOperator processing {target_table}')
            redshift = PostgresHook(postgres_conn_id=self.redshift_conn_id)

            check_records = redshift.get_records(check_template.format(self.target_table))


如何做到这一点?
谢谢您的帮助。

您是在寻找SQL来检查列中的空值吗?如果是的话

select count(1) from <table> where <column> is NULL; 

如有其他问题,请澄清

您是否在寻找SQL来检查列中的空值?如果是的话

select count(1) from <table> where <column> is NULL; 

如有其他问题,请澄清

如果你认为count1比count快,那么你错了。事实上,这是很慢的。我确实从SELECT att.attname中选择了COUNT*。。。AS foo为NULL,但返回主列的名称。我会知道里面是否有空值。如果为空值,则我的DAG不正常。如果您认为count1比count*快,则您错了。事实上,这是很慢的。我确实从SELECT att.attname中选择了COUNT*。。。AS foo为NULL,但返回主列的名称。我会知道里面是否有空值。如果为空值,则我的DAG不正常。主键不能包含空值。您是否正在尝试检查表是否为空?不仅是空的,我还想知道数据的质量是否良好,为此,我必须确定在我知道没有空值的列中是否有空值。主键不能包含空值。您是否正在尝试检查表是否为空?不仅是空的,我还想知道数据的质量是否良好,为此,我必须确定在我知道没有空值的列中是否有空值。