事件表列

事件表 是一种特殊类型的数据库表,具有一组预定义的列。该表的结构旨在支持用于处理遥测数据的框架的 OpenTelemetry (https://opentelemetry.io/) 数据模型。

有关使用事件表的更多信息,请参阅 使用事件表

事件表列

事件表包含以下列:

数据类型

描述

TIMESTAMP

TIMESTAMP_NTZ

事件创建时的 UTC 时间戳。对于表示时间 span 的事件,这是时间 span 的结尾。

START_TIMESTAMP

TIMESTAMP_NTZ

对于表示时间 span 的事件(如跟踪事件),时间 span 的开头作为 UTC 时间戳。

OBSERVED_TIMESTAMP

TIMESTAMP_NTZ

用于日志的 UTC 时间。当前值与 TIMESTAMP 的值相同。

TRACE

OBJECT

跟踪所有信号类型的上下文。包含字符串值 trace_idspan_id

RESOURCE

OBJECT

保留以供将来使用。

RESOURCE_ATTRIBUTES

OBJECT

用于标识事件源(例如数据库、架构、用户、仓库等)的属性。

SCOPE

OBJECT

事件的作用域。例如,日志的类名。

SCOPE_ATTRIBUTES

OBJECT

保留以供将来使用。

RECORD_TYPE

STRING

事件类型。以下其中一项:

  • LOG,适用于日志消息。

  • SPAN,适用于在同一线程上按顺序执行的用户定义函数调用。有关更多信息,请参阅 RECORD_TYPE 列

  • SPAN_EVENT,适用于单个跟踪事件。单个查询可以发出多个 SPAN_EVENT

RECORD

OBJECT

每种记录类型的固定值,如 RECORD 列 中所述。

RECORD_ATTRIBUTES

OBJECT

每种记录类型的变量属性,如 RECORD_ATTRIBUTES 列 中所述。

VALUE

VARIANT

主要事件值。

EXEMPLARS

ARRAY

保留以供将来使用。

按事件类型获取的数据

日志数据

属性

描述

OBSERVED_TIMESTAMP

当前值与 TIMESTAMP 的值相同。

RECORD

:ref:` 日志事件 <label-event_table_record_column_log>` 记录的严重性级别。

RECORD_ATTRIBUTES

代码中发出日志事件的位置。这些值因语言而异,但可以包括代码文件路径、函数名称、行号等。

RECORD_TYPE

事件类型:LOG,适用于日志消息

RESOURCE_ATTRIBUTES

用于标识事件源(例如数据库、架构、用户、仓库等)的属性。

SCOPE

事件发生的作用域,例如创建日志事件的类的名称。

TIMESTAMP

事件创建时的时间戳。

VALUE

日志消息。

指标数据

备注

指标数据收集是适用于所有账户的预览版功能。

属性

描述

RECORD

对于指标事件,为包含指标名称和单位的对象。

RECORD_TYPE

事件类型:METRIC,适用于指标数据点。

RESOURCE_ATTRIBUTES

用于标识事件源(例如数据库、架构、用户或仓库)的属性。

START_TIMESTAMP

RECORD 列 metric_type 值为 sum 时,这是收集指标的时间。metric_type 值为 gauge 时不使用。

TIMESTAMP

事件创建时的时间戳。

VALUE

指标的数值。

跟踪事件的数据

属性

描述

RECORD

适用于 span、包含 span 名称和种类的对象;适用于 span 事件,对象包括 span 的名称。

RECORD_ATTRIBUTES

与 :ref:` span <label-event_table_record_attributes_span>` 或 :ref:` span 事件 <label-event_table_record_attributes_span_event>` 关联的属性数据。

RECORD_TYPE

事件类型:SPAN,适用于 span;SPAN_EVENT,适用于 span 事件。

RESOURCE_ATTRIBUTES

用于标识事件源(例如数据库、架构、用户、仓库等)的属性。

START_TIMESTAMP

适用于 span、span 开始的时间。不适用于 span 事件。

TIMESTAMP

事件创建时的时间戳。

TRACE

标识符 trace_idspan_id,适用于 span 以及其中的 span 事件。

EXEMPLARS 列

保留以供将来使用。

OBSERVED_TIMESTAMP 列

日志的 UTC 时间戳。不用于跟踪事件。

RECORD 列

提供有关事件的核心信息,包括日志事件的日志级别或跟踪事件(span 或 span 事件记录)的名称。

针对记录的属性(如果有)记录在 RECORD_ATTRIBUTES 列 中。

此列包含的值因 RECORD_TYPE 列LOGSPANSPAN_EVENT)的值而异,正如以下部分中所述。

针对 LOG RECORD_TYPE

当 RECORD_TYPE 列值为 LOG 时,RECORD 列值包含日志消息的严重性。列值可能包含以下键:

类型

描述

severity_text

STRING

日志严重性的文本。以下其中一项:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

当日志条目用于 :doc:` 未处理的异常 </developer-guide/logging-tracing/unhandled-exception-messages>` 时,此值是当前语言运行时的最高严重性错误级别。例如,对于用 Python 编写的代码,其值为 FATAL

示例

{
  "severity_text": "INFO"
}
Copy

针对 METRIC RECORD_TYPE

备注

指标数据收集是适用于所有账户的预览版功能。

指标为 CPU 和由 Snowflake 生成的内存数据。您可以使用此数据来分析资源消耗。

执行处理程序语言及其环境会显著影响指标数据的含义。有关更多信息,请参阅 使用处理程序代码发送指标数据

类型

描述

metric.name

字符串

按行记录的指标的名称。以下其中一项:

  • process.memory.usage:执行期间消耗的内存量(以字节为单位)。

  • process.cpu.utilization:CPU 使用。根据处理程序语言的不同进行不同的度量。

有关更多信息,请参阅 使用处理程序代码发送指标数据

metric.unit

字符串

指标的单位;例如,bytes

metric_type

字符串

指标数据的 OpenTelemetry 指标点类型,例如,sumgauge

value_type

字符串

VALUE 列中值的数据类型,例如,DOUBLEINT

示例

{
  "metric": {
    "name": "process.memory.usage",
    "unit": "bytes"
  },
  "metric_type": "sum",
  "value_type": "INT"
}
Copy

针对 SPAN RECORD_TYPE

span 表示函数和过程的单独执行。对于存储过程,有单个 span。对于用户定义的函数,单个函数调用可能有多个 span,具体取决于 Snowflake 如何决定计划执行。

对于 trace_id 列的 TRACE 键,给定查询的所有 span 具有相同的值。

span 的持续时间是 start_timestamptimestamp 列中的值之间的差值,分别指示 span 执行的开始时间和结束时间。

span 和查询跟踪的 ID 使用 TRACE 列中的值表示。

Snowflake 将为每个执行创建一个 span,具有如下所示的键:

类型

描述

dropped_attributes_count

整数

达到记录的最大值后忽略的属性数。

name

字符串

当可执行文件的处理程序用 Python 编写时,那么它就标识了发出数据的函数或过程的处理程序。这因可执行文件类型而异,如下所示:

  • 过程:处理程序函数名称

  • 用户定义的函数 (UDF):处理程序函数名称

  • 用户定义的表函数 (UDTF):处理程序类名称

  • 客户端代码:开始 span 的客户端 API 的名称。

当可执行文件的处理程序用 Python 以外的语言编写时,这是一个固定值,例如 snow.auto_instrumented

kind

字符串

固定值 SPAN_KIND_INTERNAL

parent_span_id

十六进制字符串

标识当前跟踪所经过的过程或 UDF 的 span。如果存在此值,则表示当前过程或 UDF 调用是由调用链关系中的另一个过程执行的。该“父”过程的 span_id 值与此 parent_span_id 相同。

snow.process.memory.usage.max

字符串

可选。如果存在,则指定在此 span 执行期间使用的最大内存量(以字节为单位)。

status

字符串

当 span 对应 :doc:` 未处理的异常 </developer-guide/logging-tracing/unhandled-exception-messages>` 时,则为 STATUS_CODE_ERROR。否则,显示 STATUS_CODE_UNSET

对于用户定义的函数,Snowflake 可以添加 span 属性,指示函数处理和发出的行数。

针对 SPAN_EVENT RECORD_TYPE

span 事件是附加到特定 span 执行的事件记录,如上所述。您可以创建事件以满足应用程序的需求。span 事件数上限为 128 个。

TRACE 列的值将标识事件创建的 span。

span 事件具有单个键 name,并且可以在 RECORD_ATTRIBUTES 列中添加任意属性。

类型

描述

name

字符串

span 事件的名称。

RECORD_ATTRIBUTES 列

使用由 Snowflake 或代码设置的元数据描述事件。该值将因行包含的记录类型而异,如以下部分所述。

针对 LOG RECORD_TYPE

代码中发出日志事件的位置,包括代码文件路径、函数名称、行号等。

除了下面列出的属性外,您还可以添加自己的属性,以便将其包含在 RECORD_ATTRIBUTES 值中。

属性

类型

描述

code.filepath

整数

包含生成消息的代码的文件。

code.function

字符串

生成消息的函数的名称。

code.lineno

整数

代码中生成消息的行号。

code.namespace

整数

生成消息的代码的命名空间。

exception.message

字符串

来自 :doc:` 未处理异常 </developer-guide/logging-tracing/unhandled-exception-messages>` 的错误消息。

exception.type

字符串

:doc:` 未处理异常 </developer-guide/logging-tracing/unhandled-exception-messages>` 的类的名称。

exception.stacktrace

字符串

由语言运行时格式化的 :doc:` 未处理异常 </developer-guide/logging-tracing/unhandled-exception-messages>` 的堆栈跟踪。

exception.escaped

布尔

如果此条目来自 :doc:` 未处理的异常 </developer-guide/logging-tracing/unhandled-exception-messages>`,则为 true

thread.id

整数

用于创建日志事件的线程。

thread.name

字符串

用于创建日志事件的线程。

示例

在下面的示例中,所有属性都是由 Snowflake 添加的,但由自定义属性添加 employee.id 的除外。

{
  "code.filepath": "main.scala",
  "code.function": "$anonfun$new$10",
  "code.lineno": 149,
  "code.namespace": "main.main$",
  "thread.id": 1,
  "thread.name": "main"
  "employee.id": "52307953446424"
}
Copy

针对 SPAN RECORD_TYPE

记录 span 时为 span 分配的属性(如果有)。属性名称和值由代码或 Snowflake 设置。

下表列出了 Snowflake 可能设置的属性。

属性

类型

描述

snow.input.rows

整数

函数的 span 处理的输入行数。

snow.output.rows

整数

函数的 span 成功处理的输出行数。

示例

以下示例中的代码包括 Snowflake 设置的属性。

{
  "snow.input.rows": 12
  "snow.output.rows": 12
}
Copy

示例

以下示例中的代码包括由处理程序代码设置的属性。

{
  "MyFunctionVersion": "1.1.0"
}
Copy

针对 SPAN_EVENT RECORD_TYPE

记录 span 事件时为事件分配的属性(如果有)。属性名称和值可以由 Snowflake 或用户代码设置。

示例

以下示例中的代码包括由处理程序代码设置的属性。

{
  "mykey1": "value1",
  "mykey2": "value2"
}
Copy

RECORD_TYPE 列

指定事件表行描述的记录的类型。此列的值标识事件表可能包含三类记录中哪类记录的数据。

RECORD 列包含此记录的数据。RECORD_ATTRIBUTES 列包含此记录的元数据(如果有)。

下表列出了此列的可能值。

列值

描述

LOG

该行表示处理程序代码生成的日志条目。

SPAN

该行表示一个 span。

对于存储过程,有单个 span。对于可以并行化的用户定义函数,执行该函数的每个线程都有一个 span。线程数将因多种因素而异,包括执行函数的 Snowflake 仓库的大小。

一个 span 可以包含多个 span 事件。有关更多信息,请参阅 记录的 span 数据

SPAN_EVENT

该行表示一个 span 事件。一个特定 span 可以附加多个 span 事件记录。处理程序代码可能会创建事件以满足您的需求。span 事件数上限为 128 个。

METRIC [1]

该行表示指标的观测值。多个指标的多个观测值可以与特定 span 相关联。

RESOURCE 列

保留以供将来使用。

RESOURCE_ATTRIBUTES 列

根据 Snowflake 对象描述事件的源。

构成此列值的属性由 Snowflake 设置,无法更改。

事件源的资源属性

属性名称

属性类型

描述

示例

snow.database.id

整数

包含可执行文件的数据库的内部/系统生成的标识符。

12345

snow.database.name

字符串

包含可执行文件的数据库的名称。

MY_DATABASE

snow.executable.id

整数

生成事件的可执行文件(过程、函数 SnowService 等)的内部/系统生成的标识符。

12345

snow.executable.name

字符串

生成事件的可执行文件的名称。例如,这可能是过程、函数或 Streamlit 应用程序的名称。

MY_UDF

snow.executable.runtime.version

字符串

可执行语言的运行时版本。这将是特定于语言的值,如下所述:

  • Java:1117

  • JavaScript:无值

  • Python:从 3.93.12

  • Scala:2.12

  • SQL:无值

procedure

snow.executable.type

字符串

以下其中一项:

  • procedure,适用于存储过程

  • function,适用于用户定义的函数

  • sql,适用于单个查询中的事件,例如 Snowflake Scripting 块。

  • SnowparkContainers,适用于 Snowpark Container Services 服务。

  • streamlit,适用于 Streamlit 应用程序

procedure

snow.owner.id

整数

内部/系统生成的具有可执行文件 OWNERSHIP 权限的角色标识符。

1234

snow.owner.name

字符串

具有可执行文件的 OWNERSHIP 权限的角色的名称。

UDF_OWNER_RL

snow.schema.id

整数

包含可执行文件的架构的内部/系统生成的标识符。

12345

snow.schema.name

字符串

包含可执行文件的架构的名称。

MY_SCHEMA

telemetry.sdk.language

字符串

资源/SDK 的语言。Snowflake 使用 Java、Scala、Python、JavaScript 和 SQL。

java

执行环境的资源属性

属性

类型

描述

示例

db.user

字符串

对于函数或过程,这是指执行该函数或过程的用户的名称。对于 Streamlit 应用程序,这是指在某一事件中查看该应用程序的用户的名称。

MY_USER_NAME

snow.query.id

字符串

查询的 ID。

01a6aeb7-0604-c466-0000-097127d13812

snow.release.version

字符串

生成事件时运行的 Snowflake 版本

7.9.0

snow.session.id

整数

运行可执行文件的会话的 ID。

10

snow.session.role.primary.id

整数

会话中主要角色的内部/系统生成的标识符。

10

snow.session.role.primary.name

字符串

会话中主要角色的名称。

MY_ROLE

snow.user.id

整数

运行查询的用户的内部/系统生成的标识符。

1234

snow.warehouse.id

整数

运行(生成事件的)查询的仓库的内部/系统生成的标识符。

12345

snow.warehouse.name

字符串

运行(生成事件的)查询的仓库的名称。

MY_WAREHOUSE

应用程序的资源属性

属性

类型

描述

示例

snow.application.consumer.name

字符串

适用于 Snowflake Native App,是使用者账户的名称。

CONSUMER_NAME

snow.application.consumer.organization

字符串

适用于 Snowflake Native App,是使用者组织的名称。

CONSUMER_ORG_NAME

snow.application.id

字符串

适用于 Snowflake Native App,是应用程序的内部/系统生成的标识符。

ABCZN3J3

snow.application.name

字符串

适用于 Snowflake Native App,是应用程序的名称。

MY_INSTALLED_APP_NAME

snow.application.package.name

字符串

适用于 Snowflake Native App,是应用程序包的名称。

MY_INSTALLED_PACKAGE_NAME

snow.listing.global_name

字符串

适用于 Snowflake Native App,是列表的内部/系统生成的标识符。

GZYZN3J3

snow.listing.name

字符串

适用于 Snowflake Native App,是列表的名称。

MY_LISTING_NAME

Snowflake 版本的资源属性

属性

类型

描述

示例

service.version

字符串

可执行文件的版本(如果相关)。由它们存在的点联接的 snow.versionsnow.patch 组合。标准 OpenTelemetry 属性。

2.3.1

snow.patch

字符串

正在运行的可执行文件的补丁级别。

1

snow.version

字符串

正在运行的可执行文件的版本。

2.3

示例

{
  "db.user": "MYUSERNAME",
  "snow.database.id": 13,
  "snow.database.name": "MY_DB",
  "snow.executable.id": 197,
  "snow.executable.name": "FUNCTION_NAME(I NUMBER):ARG_NAME(38,0)",
  "snow.executable.type": "FUNCTION",
  "snow.owner.id": 2,
  "snow.owner.name": "MY_ROLE",
  "snow.query.id": "01ab0f07-0000-15c8-0000-0129000592c2",
  "snow.schema.id": 16,
  "snow.schema.name": "PUBLIC",
  "snow.session.id": 1275605667850,
  "snow.session.role.primary.id": 2,
  "snow.session.role.primary.name": "MY_ROLE",
  "snow.user.id": 25,
  "snow.warehouse.id": 5,
  "snow.warehouse.name": "MYWH",
  "telemetry.sdk.language": "python"
}
Copy

SCOPE 列

适用于日志事件,发出事件的代码的命名空间,例如创建日志条目的类的名称。这不用于跟踪事件。

下表列出了此列中可能包含的属性。

范围值

属性

类型

描述

示例

name

字符串

发出事件的代码的命名空间。

com.sample.MyClass

示例

{
  "name": "com.sample.MyClass"
}
Copy

SCOPE_ATTRIBUTES 列

保留以供将来使用。

START_TIMESTAMP 列

span 以 UTC 时间戳开始的时间。

RECORD_TYPE 列值

START_TIMESTAMP 值描述

LOG

未使用。

SPAN

span 开始的时间。

SPAN_EVENT

未使用。

METRIC [2]

RECORD 列 metric_type 值为 sum 时,这是收集指标的时间。metric_type 值为 gauge 时不使用。

TIMESTAMP 列

发出事件的时间。该值的含义将因行所表示的记录类型而异,如下表所示:

RECORD_TYPE 列值

TIMESTAMP 值描述

LOG

发出事件的挂钟时间。

SPAN

执行结束的时间。

SPAN_EVENT

发出事件的挂钟时间。

TRACE 列

表示函数和过程执行的唯一标识符。

RECORD_TYPE 列值

TRACE 值描述

LOG

未使用。

SPAN

trace_idspan_id

SPAN_EVENT

trace_idspan_id

跟踪值

下表列出了此列中可能包含的属性。

属性

类型

描述

示例

span_id

十六进制字符串

线程模型的唯一标识符。过程,将为单线程,将具有单个 span_id 值。函数,可能由 Snowflake 对多个线程(例如多行)执行,可能具有多个 span_id 值。

如果当前 span 来自一个调用了另一个存储过程的存储过程或跟踪中的 UDF,则此 span_id 值与被调用的过程或 UDF 的 span RECORD 列 parent_span_id 值相同。

b4c28078330873a2

trace_id

十六进制字符串

从查询发出的调用的唯一标识符。当存储过程没有在调用链中被调用时,每次调用都有自己的 trace_id 值。在查询中,对查询发出的所有函数调用将共享相同的 trace_id 值。

当一个过程被另一个过程或调用链中的 UDF 调用时,它与链中的其他过程和 UDFs 具有相同的 trace_id 值。

此值对于每个查询均唯一,并且对于查询中的所有 span 均相同。您可以使用它对单个查询执行中的事件进行分组。

6992e9febf0b97f45b34a62e54936adb

示例

以下示例中的代码显示 span 或 span 事件将存在的属性。

{
  "span_id": "b4c28078330873a2",
  "trace_id": "6992e9febf0b97f45b34a62e54936adb"
}
Copy

VALUE 列

  • 对于日志事件,这通常是日志消息。当记录的事件是针对 :doc:` 未处理的异常 </developer-guide/logging-tracing/unhandled-exception-messages>` 时,此列中的值将仅为 exception

  • 对于指标,这是指标的数值。[3]

请注意,VALUE 列的类型为 VARIANT(不是 STRING),因此它可以具有某些语言(例如 JavaScript)的非字符串值。

语言: 中文