【问题标题】:Create table from existing table but drop fields that have too much missing data SQL从现有表创建表,但删除缺少数据 SQL 过多的字段
【发布时间】:2021-05-19 15:49:01
【问题描述】:

我正在尝试从我筛选特定条件的现有表中创建一个新表。新表应删除原始表中每列缺少 50% 或更多行值的字段(列)(IS NULL),然后一些更基本的条件(如 A 列和 B 列的行值不能为空)。过滤的确切标准是:

  1. 删除缺少 50% 或更多列数据的所有列
  2. E 列必须介于 50 和 100 之间
  3. A 列和 B 列必须有一个行值
  4. F 列必须在 200 到 1000 之间

以下只是应用标准 1-4 后的表 A(原始表)和过滤后的表 B 的示例。

原表(A):

Col_A Col_B Col_C Col_D Col_E Col_F
xy rs NULL NULL 55 500
xx NULL NULL NULL 65 845
NULL rt x33 NULL 120 100
xz rz NULL NULL 80 300
xw rp NULL NULL 10 90

现有表中的新表 (B):

Col_A Col_B Col_E Col_F
xy rs 55 500
xz rz 80 300

我的问题是我知道如何过滤条件 2、3 和 4 的数据,如下所示,但我不知道如何遍历每一列并检查该列是否有 50% 或更多的 NULL 值或缺失本例中的值。

CREATE TABLE B
AS SELECT * FROM A
WHERE (Col_A != "" AND Col_B != "") 
  AND (Col_E >= 50 AND Col_E <= 100) 
  AND (Col_F >= 200 AND Col_F <= 1000);

我找到了一种在单独的查询中检查我的 NULL 值的方法,如下所示:

SELECT 
(COUNT(*) - COUNT(Col_A))/COUNT(*) AS NULL_A,
(COUNT(*) - COUNT(Col_B))/COUNT(*) AS NULL_B,
(COUNT(*) - COUNT(Col_C))/COUNT(*) AS NULL_C,
(COUNT(*) - COUNT(Col_D))/COUNT(*) AS NULL_D,
(COUNT(*) - COUNT(Col_E))/COUNT(*) AS NULL_E,
(COUNT(*) - COUNT(Col_F))/COUNT(*) AS NULL_F
FROM A;

此表的输出将告诉我每列中缺失值的数量。但是如何将它与我拥有的其他 WHERE 条件合并到我的原始查询中?这甚至可能吗?任何帮助将不胜感激。

【问题讨论】:

  • 您的数据库标签看起来不兼容。请仅使用您真正使用的数据库进行标记。
  • @GordonLinoff 我删除了 sql-server 和 apache spark sql。我正在使用 zepplin notebook 处理 GCP,但只使用 ANSI sql。如果我的标签需要任何其他更改,请告诉我,谢谢!
  • 必须动态构建 SQL 语句字符串以仅包含满足 50%+ 标准的字段。使用 If Then 或 CASE 结构做出决定。你能建立存储过程吗?不知道如何从聚合查询中提取百分比。在 Access VBA 中,我会使用 DLookup()。

标签: sql google-cloud-platform apache-zeppelin


【解决方案1】:

我已尝试使用 Dataprep,并且能够删除具有 > 50% NULL 值的列,我相信这可能符合您的要求。

以下是您可以遵循的步骤,

  1. 从云控制台转到 dataprep,接受所有条款和条件
  2. 在 dataprep 主页中创建流

  1. 连接到您的数据并导入您的数据集,单击导入并添加到流

  1. 数据将添加到配方中,单击配方以转换/编辑您的数据

  1. 您将能够在 dataprep 画布上查看您的数据

  1. 您将能够看到所有列,它们的数据类型,没有。顶部的有效值和缺失值(即上述数据集,灰色条显示缺失值的数量。

  1. 选择编号更多的列。缺失值并删除。

  1. 所有转换后点击右上角的运行按钮。
  2. 选择结果数据的输出目的地
  3. 您可以选择运行环境作为 Dataflow 或 Trifacta。
  4. 最后单击运行。您将在指定的目的地获得结果数据。

如需了解更多信息,请关注Qwiklabs 上的此实验室或视频 Youtube

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 2013-11-24
    • 2013-11-12
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多