【问题标题】:Athena query results show null values despite is not null condition in query尽管查询中的条件不是空,但 Athena 查询结果显示空值
【发布时间】:2020-05-27 07:21:08
【问题描述】:

我在 Athena 中运行了以下查询。我想收到所有在“resource_tags_aws_cloudformation_stack_name”中包含标签的结果。但是,当我运行查询时,我的结果显示“resource_tags_aws_cloudformation_stack_name”为空的行,我不知道自己做错了什么。

SELECT 
cm.line_item_usage_account_id,
         pr.line_of_business,
         cm.resource_tags_aws_cloudformation_stack_name, 
        SUM(CASE WHEN cm.line_item_product_code = 'AmazonEC2'
THEN line_item_unblended_cost * 0.97    
ELSE cm.line_item_unblended_cost END) AS discounted_cost, 
CAST(cm.line_item_usage_start_date AS DATE) AS start_day
FROM cost_management cm
JOIN prod_cur_metadata pr ON cm.line_item_usage_account_id = pr.line_item_usage_account_id
WHERE cm.line_item_usage_account_id IN ('1234504482')
AND cm.resource_tags_aws_cloudformation_stack_name IS NOT NULL
        AND cm.line_item_usage_start_date
    BETWEEN date '2020-01-01'
        AND date '2020-01-30'
GROUP BY  cm.line_item_usage_account_id,pr.line_of_business,  cm.resource_tags_aws_cloudformation_stack_name, CAST(cm.line_item_usage_start_date AS DATE), pr.line_of_business
HAVING sum(cm.line_item_blended_cost) > 0
ORDER BY  cm.line_item_usage_account_id 

【问题讨论】:

  • 我猜有些数据行有resource_tags_aws_cloudformation_stack_name = ''(不是NULL)。可以这样吗?
  • 这可能是一个因素,不幸的是,我无法要求任何人验证这一点。有没有办法让我可以查询,以便我得到“真实”的结果,而不是有空格的结果?
  • 我修改了查询以排除 ' ',这似乎有效。非常感谢您的回答。
  • 请将以上内容添加为可以接受的答案,这样该问题就不会出现在其他用户的“未回答”列表中。

标签: presto amazon-athena


【解决方案1】:

您可以尝试如下空间用例

    AND Coalesce(cm.resource_tags_aws_cloudformation_stack_name,' ') !=' '

或者,如果您有多个空格,请尝试。如果实际数据中需要空格,则以下查询不好

    AND Regexp_replace(cm.resource_tags_aws_cloudformation_stack_name,' ') is not null

除此之外,您还可能在数据中包含特殊字符,例如 CR 或 LF。虽然这种情况很少见

【讨论】:

    【解决方案2】:

    我修改了我的查询以排除“”,这似乎有效:

    SELECT 
    cm.line_item_usage_account_id,
             pr.line_of_business,
             cm.resource_tags_aws_cloudformation_stack_name, 
            SUM(CASE WHEN cm.line_item_product_code = 'AmazonEC2'
    THEN line_item_unblended_cost * 0.97    
    ELSE cm.line_item_unblended_cost END) AS discounted_cost, 
    CAST(cm.line_item_usage_start_date AS DATE) AS start_day
    FROM cost_management cm
    JOIN prod_cur_metadata pr ON cm.line_item_usage_account_id = pr.line_item_usage_account_id
    WHERE cm.line_item_usage_account_id IN ('1234504482')
    AND NOT cm.resource_tags_aws_cloudformation_stack_name = ' ' 
            AND cm.line_item_usage_start_date
        BETWEEN date '2020-01-01'
            AND date '2020-01-30'
    GROUP BY  cm.line_item_usage_account_id,pr.line_of_business,  cm.resource_tags_aws_cloudformation_stack_name, CAST(cm.line_item_usage_start_date AS DATE), pr.line_of_business
    HAVING sum(cm.line_item_blended_cost) > 0
    ORDER BY  cm.line_item_usage_account_id 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      相关资源
      最近更新 更多