GCP Bigquery: не удается запросить журналы доступа стекового драйвера, экспортированные в облачное хранилище, поскольку недопустимое поле json "@type" - PullRequest
0 голосов
/ 08 мая 2019

Я храню журнал доступа к пиксельному изображению в хранилище облачного хранилища dev-access-log-bucket, используя стандартную "раковину"

так что файлы выглядят так requests/2019/05/08/15:00:00_15:59:59_S1.json и одна строка выглядит следующим образом (я отформатировал JSON, но это на одной строке нормально):

{
  "httpRequest": {
    "cacheLookup": true,
    "remoteIp": "93.24.25.190",
    "requestMethod": "GET",
    "requestSize": "224",
    "requestUrl": "https://dev-snowplow.legalstart.fr/one_pixel_image.png?user_id=0&action=purchase&product_id=0&money=10",
    "responseSize": "779",
    "status": 200,
    "userAgent": "python-requests/2.21.0"
  },
  "insertId": "w6wyz1g2jckjn6",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry",
    "statusDetails": "response_sent_by_backend"
  },
  "logName": "projects/tracking-pixel-239909/logs/requests",
  "receiveTimestamp": "2019-05-08T15:34:24.126095758Z",
  "resource": {
    "labels": {
      "backend_service_name": "",
      "forwarding_rule_name": "dev-yolaw-pixel-forwarding-rule",
      "project_id": "tracking-pixel-239909",
      "target_proxy_name": "dev-yolaw-pixel-proxy",
      "url_map_name": "dev-urlmap",
      "zone": "global"
    },
    "type": "http_load_balancer"
  },
  "severity": "INFO",
  "spanId": "7d8823509c2dc94f",
  "timestamp": "2019-05-08T15:34:23.140747307Z",
  "trace": "projects/tracking-pixel-239909/traces/bb55577eedd5797db2867931f8de9162"
}

все это опять-таки стандартные вещи GCP, я ничего здесь не настраивал.

Итак, теперь я хочу сделать несколько запросов от Bigquery, я создаю набор данных и внешнюю таблицу, настроенную так:

External Data Configuration
Source URI(s) gs://dev-access-log-bucket/requests/*
Auto-detect schema true   (note: I don't know why it puts true though i've manually defined it)
Ignore unknown values true
Source format NEWLINE_DELIMITED_JSON
Max bad records 0

и следующая ручная схема:

timestamp   DATETIME    REQUIRED    
httpRequest     RECORD  REQUIRED    
httpRequest. requestUrl     STRING  REQUIRED    

и когда я запускаю запрос

SELECT
  timestamp
FROM
  `path.to.my.table`
LIMIT
  1000

Я получил

Неверное имя поля "@type". Поля должны содержать только буквы, цифры и подчеркивания, начинаться с буквы или подчеркивания и содержать не более 128 символов.

Как можно обойти это без необходимости предварительной обработки журнала, чтобы в нем не было поля "@type"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...