事件表列

事件表 是一种特殊类型的数据库表,具有一组预定义的列。该表的结构旨在支持用于处理遥测数据的框架的 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

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

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

日志事件 记录的严重性级别。

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 的名称。

当使用 SQL 编写跟踪的代码时,例如在某个过程中执行的 SQL 语句,此为所执行语句的名称,例如 SELECTINSERT

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

kind

字符串

SPAN_KIND_SERVER,当使用 SQL 编写跟踪的代码时。否则,此为固定值 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 可能设置的属性。

属性

类型

描述

db.query.executable.names

字符串

在此时间段内跟踪的查询下执行的可执行文件的名称。

db.query.table.names

字符串

在此时间段内跟踪的查询中读取或修改的表的名称。

db.query.view.names

字符串

在此时间段内跟踪的查询中访问的视图的名称。

db.query.text

字符串

在此时间段内跟踪的 SQL 查询的文本。仅当启用 SQL 查询文本跟踪时包括在内。有关更多信息,请参阅 SQL 语句跟踪

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

该行表示指标的观测值。多个指标的多个观测值可以与特定 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 的事件的:code:query,例如在存储过程中执行 SQL 语句时。

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

  • spcs,适用于 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

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

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

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

语言: 中文