11.4 并行表导入实用程序

2024年 4月 17日 88.9k 0

MySQL Shell 的并行表导入实用程序 util.importTable()可以将大型数据文件的数据快速导入到 MySQL 关系表。该实用程序分析输入数据文件,将其分配为块,并使用并行连接将块上传到目标 MySQL 服务器。该实用程序能够比使用语句的标准单线程上传更快地完成大量数据导入LOAD DATA

  • 关于实用程序
  • 要求和限制
  • 运行实用程序
  • 导入表的选项
  • Oracle 云基础设施选项
  • S3 兼容服务的选项
  • Microsoft Azure Blob 存储选项

关于实用程序

MySQL Shell 的并行表导入实用程序支持 MySQL Shell 表导出实用程序的输出,该实用程序可以压缩其生成的数据文件作为输出,并可以将其导出到本地文件夹或对象存储桶。并行表导入实用程序的默认方言是表导出实用程序生成的输出文件的默认方言。并行表导入实用程序还可用于从其他源上传文件。

要导入的一个或多个数据文件可以位于以下任意位置:

  • 客户端主机可将其作为本地磁盘访问的位置。
  • 客户端主机可通过 HTTP 或 HTTPS 访问的远程位置(用 URL 指定)。以这种方式访问的文件不支持模式匹配。
  • Oracle Cloud Infrastructure 对象存储存储桶(来自 MySQL Shell 8.0.21)。

数据将导入到活动 MySQL 会话所连接的 MySQL 服务器中的单个关系表中。

当您运行并行表导入实用程序时,您可以指定数据文件中的字段与 MySQL 表中的列之间的映射。您可以为语句设置字段和行处理选项来LOAD DATA 处理任意格式的数据文件。对于多个文件,所有文件必须采用相同的格式。该实用程序的默认方言映射到使用 SELECT...INTO OUTFILE具有该语句的默认设置的语句创建的文件。该实用程序还具有映射到 CSV 文件(在 DOS 或 UNIX 系统上创建)、TSV 文件和 JSON 的标准数据格式的预设方言,并且您可以根据需要使用字段和行处理选项自定义这些格式。请注意,JSON 数据必须采用每行文档格式。

自并行表导入实用程序推出以来,已添加了许多功能,因此请使用最新版本的 MySQL Shell 来获取该实用程序的全部功能。

  • 输入预处理

    从 MySQL Shell 8.0.22 开始,并行表导入实用程序可以从一个或多个数据文件中捕获列以进行输入预处理,其方式与语句相同 LOAD DATA。可以放弃选定的数据,也可以转换数据并将其分配给目标表中的列。

  • Oracle 云基础设施对象存储导入

    在 MySQL Shell 8.0.20 之前,数据必须从客户端主机可作为本地磁盘访问的位置导入。从 MySQL Shell 8.0.21 开始,还可以从选项指定的 Oracle Cloud Infrastructure 对象存储存储桶导入数据 osBucketName

  • 多个数据文件导入

    在 MySQL Shell 8.0.22 之前,并行表导入实用程序可以将单个输入数据文件导入到单个关系表中。从 MySQL Shell 8.0.23 开始,该实用程序还能够导入指定的文件列表,并且支持通配符模式匹配以包含某个位置的所有相关文件。单次运行该实用程序上传的多个文件将被放置到单个关系表中,因此,例如,从多个主机导出的数据可以合并到单个表中以用于分析。

  • 压缩文件处理

    在 MySQL Shell 8.0.21 之前,并行表导入实用程序仅接受未压缩的输入数据文件。该实用程序分析数据文件,将其分配为块,并将块上传到目标 MySQL 服务器中的关系表,在并行连接之间划分块。从 MySQL Shell 8.0.22 开始,该实用程序还可以接受以 gzip( .gz) 和 zstd (.zst)格式压缩的数据文件,并根据文件扩展名自动检测格式。该实用程序以压缩格式从存储上传压缩文件,从而节省该部分传输的带宽。压缩文件无法分发为块,因此该实用程序使用其并行连接来解压缩多个文件并将其同时上传到目标服务器。如果只有一个输入数据文件,则压缩文件的上传只能使用单个连接。

MySQL Shell 的转储加载实用程序 util.loadDump()旨在导入由 MySQL Shell 的实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas()和表转储实用程序 生成的分块输出文件和元数据的组合util.dumpTables()。如果您想在将分块输出文件上传到目标服务器之前修改其中的任何数据,则可以将并行表导入实用程序与转储加载实用程序结合使用。为此,首先使用转储加载实用程序仅加载所选表的 DDL,以在目标服务器上创建该表。然后使用并行表导入实用程序从表的输出文件中捕获和转换数据,并将其导入到目标表。根据需要对要修改数据的任何其他表重复该过程。最后,使用转储加载实用程序加载您不想修改的任何剩余表的 DDL 和数据,不包括您已修改的表。有关该过程的说明,请参阅 修改转储数据。

要求和限制

并行表导入实用程序使用LOAD DATA LOCAL INFILE语句上传数据,因此 local_infile必须将系统变量设置为ON在目标服务器上。您可以通过在运行并行表导入实用程序之前在 SQL 模式下发出以下语句来执行此操作:

SET GLOBAL local_infile = 1;

为了避免已知的潜在安全问题LOAD DATA LOCAL,当 MySQL 服务器通过文件传输请求回复并行表导入实用程序的LOAD DATA 请求时,该实用程序仅发送预定的数据块,并忽略服务器尝试的任何特定请求。有关详细信息,请参阅 LOAD DATA LOCAL 的安全注意事项。

运行实用程序

并行表导入实用程序需要与目标 MySQL 服务器的现有经典 MySQL 协议连接。每个线程打开自己的会话,将数据块发送到 MySQL 服务器,或者在压缩文件的情况下,并行发送多个文件。您可以调整线程数、每个块中发送的字节数以及每个线程的最大数据传输速率,以平衡网络负载和数据传输速度。该实用程序无法通过不支持LOAD DATA语句的 X 协议连接进行操作。

在 MySQL Shell API 中,并行表导入实用程序是全局对象的函数util,并具有以下签名:

importTable ({file_name | file_list}, options)

options是导入选项的字典,如果为空则可以省略。本主题的最后部分列出了这些选项。

file_name是一个字符串,指定包含要导入的数据的单个文件的名称和路径。或者,file_list是指定多个数据文件的文件路径数组。在 Windows 上,文件路径中的反斜杠必须转义,或者您可以使用正斜杠代替。

  • 对于本地磁盘上的客户端主机可访问的文件,您可以使用架构作为目录路径的前缀 file://,或者允许其默认为架构。对于以这种方式访问的文件,文件路径可以包含通配符*(多个字符)和 ?(单个字符)以进行模式匹配。请注意,如果文件路径中存在这些通配符,实用程序会将它们视为通配符,因此可能会尝试错误的文件传输策略。
  • 对于客户端主机可通过 HTTP 或 HTTPS 访问的文件,请提供一个 URL 或 URL 列表,并以适当的http://https://架构为前缀,格式为http[s]://host.domain[:port]/path。对于以这种方式访问的文件,模式匹配不可用。 HTTP 服务器必须支持 Range 请求标头,并且必须向客户端返回 Content-Range 响应标头。
  • 对于 Oracle Cloud Infrastructure 对象存储存储桶中的文件,指定存储桶中文件的路径,并使用该osBucketName选项指定存储桶名称。

该函数返回 void,或者在发生错误时返回异常。如果用户使用 Ctrl+C或因错误而中途停止导入,则实用程序将停止发送数据。当服务器完成处理接收到的数据时,将返回消息,显示当时每个线程导入的块、完成百分比以及目标表中更新的记录数。

以下示例(第一个示例采用 MySQL Shell 的 JavaScript 模式,第二个示例采用 MySQL Shell 的 Python 模式)将单个 CSV 文件中的数据导入 /tmp/productrange.csv到 数据库products中的表中mydb ,并跳过文件中的标题行:

mysql-js> util.importTable("/tmp/productrange.csv", {schema: "mydb", table: "products", dialect: "csv-unix", skipRows: 1, showProgress: true})
mysql-py> util.import_table("/tmp/productrange.csv", {"schema": "mydb", "table": "products", "dialect": "csv-unix", "skipRows": 1, "showProgress": True})

以下 MySQL Shell 的 Python 模式示例仅指定 CSV 文件的方言。mydb 是 MySQL Shell 会话的活动模式。因此,该实用程序将文件中的数据导入 /tmp/productrange.csv到 数据库productrange中的表中 mydb

mysql-py> \use mydb
mysql-py> util.import_table("/tmp/productrange.csv", {"dialect": "csv-unix"})

MySQL Shell 的 Python 模式中的以下示例从多个文件导入数据,包括单独命名的文件、使用通配符模式匹配指定的文件范围以及压缩文件的混合:

解释mysql-py> util.import_table(
[
"data_a.csv",
"data_b*",
"data_c*",
"data_d.tsv.zst",
"data_e.tsv.zst",
"data_f.tsv.gz",
"/backup/replica3/2021_01_12/data_g.tsv",
"/backup/replica3/2021_01_13/*.tsv",
],
{"schema": "mydb", "table": "productrange"}
)

还可以使用mysqlsh命令 界面从命令行调用并行表导入实用程序。使用此接口,您可以调用该实用程序,如以下示例所示:

mysqlsh mysql://root:@127.0.0.1:3366 --ssl-mode=DISABLED -- util import-table /r/mytable.dump --schema=mydb --table=regions --bytes-per-chunk=10M --linesTerminatedBy=$'\r\n'

当您导入多个数据文件时,如果使用通配符模式匹配指定的文件范围被引用,则 MySQL Shell 的 glob 模式匹配逻辑将扩展它们,如下例所示。否则,它们将通过您输入mysqlsh命令的用户 shell 的模式匹配逻辑进行扩展 。

mysqlsh mysql://root:@127.0.0.1:3366 -- util import-table data_a.csv "data_b*" data_d.tsv.zst --schema=mydb --table=productrange --osBucketName=mybucket

当您使用mysqlsh命令的 API 参考参数直接调用并行表导入实用程序(破折号-破折号-空格序列“ --”)时,在 MySQL Shell 8.0.24 之前,columns 不支持该选项,因为不接受数组值,因此数据文件中的输入行必须包含目标表中每一列的匹配字段。从 MySQL Shell 8.0.24 开始,支持该选项,并且您可以使用字典参数指定列。另请注意,如上例所示,必须在支持此函数的 shell(例如bashkshmksh和 )中使用 ANSI-C 引用来传递换行符zsh。有关 mysqlsh命令行集成的信息,请参阅 第 5.8 节 “API 命令行集成”。

导入表的选项

并行表导入实用程序可以使用以下导入选项来指定数据的导入方式:

  • schema: "\*db_name\*"

    连接的 MySQL 服务器上的目标数据库的名称。如果省略此选项,实用程序会尝试识别并使用当前 MySQL Shell 会话所使用的架构名称,如连接 URI 字符串、\use命令或 MySQL Shell 选项中指定的那样。如果未指定架构名称并且无法从会话中识别架构名称,则会返回错误。

  • table: "\*table_name\*"

    目标关系表的名称。如果省略此选项,实用程序假定表名是不带扩展名的数据文件的名称。目标表必须存在于目标数据库中。

  • columns: \*array of column names\*

    包含导入文件中的列名称的字符串数组,按照它们映射到目标关系表中的列的顺序给出。如果导入的数据不包含目标表的所有列,或者导入数据中字段的顺序与表中列的顺序不同,请使用此选项。如果省略此选项,则输入行应包含目标表中每一列的匹配字段。从 MySQL Shell 8.0.22 开始,您可以使用此选项从导入文件或文件中捕获列以进行输入预处理,与使用语句的方式相同 LOAD DATA。例如,当您使用整数值代替数组中的列名称时,导入文件中的该列将被捕获为用户变量 。可以丢弃选定的数据,或者您可以使用该 选项来转换数据并将其分配给目标表中的列。 @*int*``@1``decodeColumns在此示例中,在 MySQL Shell 的 JavaScript 模式下,导入文件中的第二列和第四列被分配给用户变量@1@2,并且没有 decodeColumns选项将它们分配给目标表中的任何列,因此它们被丢弃。解释mysql-js> util.importTable('file.txt', { table: 't1', columns: ['column1', 1, 'column2', 2, 'column3'] });

  • decodeColumns: \*dictionary\*

    键值对的字典,它将通过选项捕获为用户变量的导入文件列分配给 目标表中的列,并以与语句子句columns相同的方式为它们指定预处理转换。 MySQL Shell 8.0.22 中提供了此选项。 SETLOAD DATA在此示例中,在 MySQL Shell 的 JavaScript 模式下,数据文件中的第一个输入列用作目标表中的第一列。已@1通过选项分配给变量的第二输入列columns在用作目标表中第二列的值之前经过除法运算。解释mysql-js> util.importTable('file.txt', { columns: ['column1', 1], decodeColumns: {'column2': '@1 / 100'} });在此示例中,在 MySQL Shell 的 JavaScript 模式下,数据文件中的输入列都被分配给变量,然后以各种方式进行转换并用于填充目标表的列:解释mysql-js> util.importTable('file.txt', { table: 't1', columns: [1, 2], decodeColumns: { 'a': '@1', 'b': '@2', 'sum': '@1 + @2', 'multiple': '@1 * @2', 'power': 'POW(@1, @2)' } });

  • skipRows: \*number\*

    在导入文件的开头跳过此行数,或者在多个导入文件的情况下,在文件列表中包含的每个文件的开头跳过此行数。您可以使用此选项在上传到表时省略包含列名称的初始标题行。默认情况下不跳过任何行。

  • replaceDuplicates: [true|false]

    true是否应替换 ( ) 或跳过 ( ) 与现有行具有相同主键或唯一索引值的输入行false。默认为 false.

  • dialect: [default|csv|csv-unix|tsv|json]

    使用一组适合指定文件格式的字段和行处理选项。您可以使用选定的方言作为进一步自定义的基础,还可以指定 linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy选项中的一个或多个来更改设置。默认方言映射到使用 SELECT...INTO OUTFILE具有该语句的默认设置的语句创建的文件。这是 MySQL Shell 的表导出实用程序生成的输出文件的默认值。其他方言可用于适应 CSV 文件(在 DOS 或 UNIX 系统上创建)、TSV 文件和 JSON 数据。适用于每种方言的设置如下:表 11.2 并行表导入实用程序的方言设置dialect``linesTerminatedBy``fieldsTerminatedBy``fieldsEnclosedBy``fieldsOptionallyEnclosed``fieldsEscapedBy``default[如果][标签][空的]false`csv[CR][LF],”true\csv-unix[如果],”false\tsv[CR][LF][标签]”true\json[如果][如果][空的]false[空的] 笔记方言的回车和换行值与操作系统无关。如果您使用linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy选项,根据命令解释器的转义约定,如果您在选项值中使用反斜杠字符 (\),则可能需要加倍反斜杠字符 (\)。与使用该语句的 MySQL 服务器一样 [LOAD DATA`](https://dev.mysql.com/doc/refman/8.0/en/load-data.html),MySQL Shell 不会验证您指定的字段和行处理选项。这些选项的不准确选择可能会导致数据部分导入到错误的字段中和/或不正确地导入到错误的字段中。请务必在开始导入之前验证您的设置,并在之后验证结果。

  • linesTerminatedBy: "\*characters\*"

    终止输入数据文件中每一行的一个或多个字符(或空字符串)。默认值与指定的方言相同,\n如果省略方言选项,则默认为换行符 ( )。该选项相当于 语句LINES TERMINATED BY的选项 LOAD DATA。请注意,该实用程序不提供 LINES STARTING BYLOAD DATA语句的等效选项,该选项设置为空字符串。

  • fieldsTerminatedBy: "\*characters\*"

    终止输入数据文件中每个字段的一个或多个字符(或空字符串)。默认值与指定的方言相同,\t如果省略方言选项,则默认为制表符 ( )。该选项相当于 语句FIELDS TERMINATED BY的选项 LOAD DATA

  • fieldsEnclosedBy: "\*character\*"

    包含输入数据文件中每个字段的单个字符(或空字符串)。默认值与指定的方言相同,如果省略方言选项,则默认值为空字符串。该选项相当于语句FIELDS ENCLOSED BY的选项LOAD DATA

  • fieldsOptionallyEnclosed: [ true | false ]

    给定的字符是 fieldsEnclosedBy包含输入数据文件中的所有字段 ( false),还是仅在某些情况下包含字段 ( true)。默认值是指定的方言,或者false省略方言选项。该选项使该 fieldsEnclosedBy选项等同于FIELDS OPTIONALLY ENCLOSED BYLOAD DATA 语句的选项。

  • fieldsEscapedBy: "\*character\*"

    输入数据文件中开始转义序列的字符。如果未提供,则不会发生转义序列解释。默认值与指定的方言相同,如果省略方言选项,则默认值为反斜杠 ()。该选项相当于语句FIELDS ESCAPED BY的选项 LOAD DATA

  • characterSet: "\*charset\*"

    MySQL Shell 8.0.21 中添加。此选项指定在导入期间解释输入数据的字符集编码。将选项设置为 binary意味着导入期间不进行任何转换。当省略此选项时,导入将使用系统变量指定的字符集 character_set_database 来解释输入数据。

  • bytesPerChunk: "\*size\*"

    对于多个输入数据文件的列表,此选项不可用。对于单个输入数据文件,此选项指定线程每次LOAD DATA调用目标服务器时发送的字节数(加上到达行末尾所需的任何附加字节) 。该实用程序将数据分发到此大小的块中,以便线程拾取并发送给目标服务器。块大小可以指定为字节数,或使用后缀 k(千字节)、M(兆字节)、G(千兆字节)。例如, bytesPerChunk="2k"使线程发送大约 2 KB 的块。最小块大小为 131072 字节,默认块大小为 50M。

  • threads: \*number\*

    用于将输入文件中的数据发送到目标服务器的最大并行线程数。如果未指定线程数,则默认最大值为 8。对于多个输入数据文件的列表,实用程序将创建指定或最大数量的线程。对于单个输入数据文件,该实用程序使用以下公式计算要创建的线程数,最多可达该最大值:min{max{1, threads}, chunks}}其中threads是最大线程数,chunks是数据将被分割成的块数,其计算方法是将文件大小除以大小 bytesPerChunk然后加 1。计算确保如果最大线程数超过该数对于实际发送的块,该实用程序不会创建不必要的线程。压缩文件无法分成块,因此该实用程序使用其并行连接一次上传多个文件。如果只有一个输入数据文件,则压缩文件的上传只能使用单个连接。

  • maxRate: "\*rate\*"

    每个线程每秒数据吞吐量的最大限制(以字节为单位)。如果需要避免客户端主机或目标服务器的网络或 I/O 或 CPU 饱和,请使用此选项。最大速率可以指定为字节数,或使用后缀 k(千字节)、M(兆字节)、G(千兆字节)。例如, maxRate="5M"将每个线程限制为每秒 5MB 数据,对于八个线程来说,传输速率为 40MB/秒。默认为0,表示没有限制。

  • showProgress: [ true | false ]

    显示 ( true) 或隐藏 ( false) 导入进度信息。true如果 stdout 是终端 (tty),则默认为,false 否则。

  • sessionInitSql: \*list of strings\*

    在每个客户端会话开始时运行的 SQL 语句列表,用于将数据加载到目标 MySQL 实例中。您可以使用此选项来更改会话变量。 MySQL Shell 8.0.30 中提供了此选项。例如,以下语句在导入过程中跳过目标 MySQL 实例上实用程序使用的会话的二进制日志记录,并增加可用于创建索引的线程数:sessionInitSQL: ["SET SESSION sql_log_bin=0;", "SET SESSION innodb_ddl_threads=8,"]如果运行 SQL 语句时发生错误,导入将停止并返回错误消息。

Oracle 云基础设施选项

MySQL Shell 支持导入存储在 Oracle 云基础设施对象存储存储桶中的输入数据文件。

  • osBucketName: "\*string\*"

    MySQL Shell 8.0.21 中添加。输入数据文件所在的 Oracle Cloud Infrastructure 对象存储存储桶的名称。默认情况下, [DEFAULT]位于的 Oracle Cloud Infrastructure CLI 配置文件中的配置文件 ~/.oci/config用于建立与存储桶的连接。您可以使用ociConfigFile和 选项替换用于连接的替代配置文件 ociProfile。有关设置 CLI 配置文件的说明,请参阅 SDK 和 CLI 配置文件。

  • osNamespace: "\*string\*"

    MySQL Shell 8.0.21 中添加。名为 by 的对象存储存储桶所在的 Oracle Cloud Infrastructure 命名空间osBucketName。对象存储存储桶的命名空间显示在 Oracle Cloud Infrastructure 控制台存储桶详细信息页面的存储桶信息选项卡中,或者可以使用 Oracle Cloud Infrastructure 命令行界面获取。

  • ociConfigFile: "\*string\*"

    MySQL Shell 8.0.21 中添加。一个 Oracle Cloud Infrastructure CLI 配置文件,其中包含用于连接的配置文件,而不是默认位置中的配置文件~/.oci/config

  • ociProfile: "\*string\*"

    MySQL Shell 8.0.21 中添加。用于连接的 Oracle Cloud Infrastructure 配置文件的配置文件名称,而不是[DEFAULT] 用于连接的 Oracle Cloud Infrastructure CLI 配置文件中的配置文件。

S3 兼容服务的选项

MySQL Shell 支持导入存储在 S3 兼容存储桶中的输入数据文件,例如 Amazon Web Services (AWS) S3。

笔记

MySQL Shell 支持命令行选项、环境变量和配置文件中的 AWS S3 配置。命令行选项覆盖环境变量、配置文件和默认选项。

有关配置要求的信息,请参阅 第 4.7 节 “云服务配置”。

  • s3BucketName: "\*string\*"

    MySQL Shell 8.0.30 中添加。转储文件所在的 S3 存储桶的名称。默认情况下, defaultAmazon Web Services (AWS) CLI 中的配置文件configcredentials位于 的文件 ~/.aws/用于建立与 S3 存储桶的连接。您可以使用s3ConfigFile和 选项替换连接的替代配置和凭据s3CredentialsFile。有关安装和配置 AWS CLI 的说明,请参阅 AWS CLI 入门。

  • s3CredentialsFile: "\*string\*"

    MySQL Shell 8.0.30 中添加。一种凭据文件,其中包含用于连接的用户凭据,而不是默认位置中的凭据 ~/.aws/credentials。通常,凭据文件包含 用于连接的 aws_access_key_id和 。aws_secret_access_key

  • s3ConfigFile: "\*string\*"

    MySQL Shell 8.0.30 中添加。一个 AWS CLI 配置文件,其中包含用于连接的配置文件,而不是默认位置中的配置文件 ~/.aws/config。通常,配置文件包含用于连接的区域和输出类型。

  • s3Profile: "\*string\*"

    MySQL Shell 8.0.30 中添加。用于连接的 s3 CLI 配置文件的配置文件名称,而不是 default用于连接的 AWS CLI 配置文件中的配置文件。

  • s3Region: "\*string\*"

    用于连接的区域的名称。

  • s3EndpointOverride: "\*string\*"

    要使用的端点 URL,而不是默认值。MySQL Shell 8.0.30 中添加。连接到 Oracle Cloud Infrastructure S3 兼容性 API 时,端点采用以下格式: .替换为对象存储命名空间和 您的区域标识符。例如,美国东部(阿什本)区域的区域标识符是。 https://*namespace*.compat.objectstorage.*region*.oraclecloud.comnamespace**regionus-ashburn-1对于美国东部(阿什本)区域中名为 axaxnpcrorw5 的命名空间:https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com

Microsoft Azure Blob 存储选项

MySQL Shell 支持从 Microsoft Azure Blob 存储导入。

笔记

MySQL Shell 支持命令行选项、环境变量和配置文件中的 Microsoft Azure Blob 存储配置。命令行选项覆盖环境变量和配置文件。

有关配置要求和配置类型优先顺序的信息,请参阅 第 4.7 节 “云服务配置”。

  • azureContainerName: "\*string\*"

    强制的。要从中导入表的 Azure 容器的名称。容器必须存在。

  • azureConfigFile: "\*string\*"

    选修的。包含存储连接参数的配置文件,而不是默认位置的配置文件,例如~/.azure/config.如果未定义,则使用默认配置文件。azureContainerName必须已定义,且不能为空。

  • azureStorageAccount: "\*string\*"

    选修的。用于操作的 Azure 存储帐户的名称。

  • azureStorageSasToken: "\*string\*"

    选修的。用于验证操作的 Azure 共享访问签名 (SAS) 令牌,而不是密钥。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论