#google-bigquery
#google-bigquery
Вопрос:
Я пытаюсь выполнить следующий запрос в BigQuery — я уверен, что остальная часть запроса верна, однако единственная проблема заключается в том, как я перечислил IP-адреса в строке ниже. Мне выдается сообщение об ошибке «Обнаружено » <FLOATING_LITERAL> «x.y «» в строке 17, столбец 62″ (где x и y — целые числа)
AND NOT (protopayload_auditlog.requestMetadata.callerIp : "IP-RANGE IP-RANGE IP-RANGE IP-RANGE")
Где IP-ДИАПАЗОН, конечно, имеет вид x.y.z.f-x.y.z.e
Я не уверен, как отформатировать эту строку IP-адресов, чтобы заставить запрос работать. Был бы очень признателен за некоторую помощь!
Ниже приведен полный запрос;
#legacySQL
SELECT
protopayload_auditlog.authenticationInfo.principalEmail AS principalEmail,
resource.labels.project_id AS project_id,
resource.labels.bucket_name AS bucket_name,
resource.labels.method AS method,
protopayload_auditlog.requestMetadata.callerIp AS callerIp,
timestamp AS timestamp
FROM (TABLE_DATE_RANGE([projectid.organisation_audit_logging.cloudaudit_googleapis_com_data_access_],
DATE_ADD(CURRENT_TIMESTAMP(), -40, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -38, 'DAY')))
WHERE
protopayload_auditlog.serviceName = "storage.googleapis.com"
AND resource.labels.method = 'google.storage.objects.get'
AND REGEXP_MATCH(protopayload_auditlog.authenticationInfo.principalEmail, r"^.*@mycompany.com")
AND NOT (protopayload_auditlog.requestMetadata.callerIp : "IP-RANGE IP-RANGE IP-RANGE IP-RANGE")
LIMIT 500
Комментарии:
1. можете ли вы поделиться несколькими примерами данных.
2. не уверен, что вы подразумеваете под «образцом данных»?
3. некоторые данные, по которым выполняется этот запрос.
Ответ №1:
вы можете использовать следующий подход в качестве отправной точки — вы можете обернуть весь длинный материал в UDF, чтобы сделать его компактным и читаемым
AND NOT net.ipv4_to_int64(net.safe_ip_from_string(protopayload_auditlog.requestMetadata.callerIp)) between net.ipv4_to_int64(net.safe_ip_from_string(ip_range1_start)) and net.ipv4_to_int64(net.safe_ip_from_string(ip_range1_end))
AND NOT net.ipv4_to_int64(net.safe_ip_from_string(protopayload_auditlog.requestMetadata.callerIp)) between net.ipv4_to_int64(net.safe_ip_from_string(ip_range2_start)) and net.ipv4_to_int64(net.safe_ip_from_string(ip_range2_end))
...