Результаты запроса Афины показывают нулевые значения, несмотря на то, что условие не является нулевым в запросе - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть следующий запрос, который я выполняю в Афине. Я хотел бы получить все результаты, которые содержат тег в '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 

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Я изменил свой запрос, чтобы исключить '', и это, кажется, работает:

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 
0 голосов
/ 12 февраля 2020

Вы можете использовать пробел, как показано ниже

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

Или, если у вас есть несколько пробелов, попробуйте. Приведенный ниже запрос не годится, если в фактических данных требуются пробелы

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

В дополнение к этому у вас также могут быть специальные символы, такие как CR или LF в данных. Хотя его редкий сценарий

...