Perfetto 翻译-trace分析-PerfettoSQL

2023-10-31  本文已影响0人  David_zhou

前言:虽然有翻译软件,虽然有chatgpt,毕竟语言隔阂,对这个工具还是一知半解,因此想通过翻译的方式和大家来一起学习下Perfetto这个强大的工具

目录

#####################以下分割线#####################
英文原文在这里

PerfettoSQL 语法

本页介绍了 PerfettoSQL 的语法,PerfettoSQL 是跟踪处理器和其他 Perfetto 分析工具中用于查询跟踪的一种 SQL 变体。 PerfettoSQL 是 使用SQLite 实现的一种SQL 变体。具体来说,任何在 SQLite 中有效的 SQL 在 PerfettoSQL 中也有效。 但仅靠SQLite语法是不够的,原因有两个:

1 相当基础,例如它不支持创建函数或宏 2 它不能用于访问仅在 Perfetto 工具中可用的功能,例如,它不能用于创建高效的分析表、从 PerfettoSQL 标准库导入模块等。

出于这个原因,PerfettoSQL 添加了新的语法片段,使编写 SQL 查询的体验更好。所有这些插件都包含关键字 PERFETTO ,以明确它们仅是 PerfettoSQL 的。

导入 PerfettoSQL 模块

INCLUDE PERFETTO MODULE 用于导入 PerfettoSQL 模块中定义的所有表/视图/函数/宏(例如,从 PerfettoSQL 标准库中)。 请注意,此语句的行为更类似于 C++ 中的 #include 语句,而不是 Java/Python 中import的语句。具体而言,模块中的所有对象在全局命名空间中都可用,而无需由模块名称限定。
例如:

-- Include all tables/views/functions from the android.startup.startups module
-- in the standard library.
INCLUDE PERFETTO MODULE android.startup.startups;

-- Use the android_startups table defined in the android.startup.startups
-- module.
SELECT *
FROM android_startups;
定义函数

CREATE PEFETTO FUNCTION 允许在 SQL 中定义函数。语法类似于 PostgreSQL 或 GoogleSQL 中的语法。
例如:

-- Create a scalar function with no arguments.
CREATE PERFETTO FUNCTION constant_fn() RETURNS INT AS SELECT 1;

-- Create a scalar function taking two arguments.
CREATE PERFETTO FUNCTION add(x INT, y INT) RETURNS INT AS SELECT $x + $y;

-- Create a table function with no arguments
CREATE PERFETTO FUNCTION constant_tab_fn()
RETURNS TABLE(ts LONG, dur LONG) AS
SELECT column1 as ts, column2 as dur
FROM (
  VALUES
  (100, 10),
  (200, 20)
);

-- Create a table function with one argument
CREATE PERFETTO FUNCTION sched_by_utid(utid INT)
RETURNS TABLE(ts LONG, dur LONG, utid INT) AS
SELECT ts, dur, utid
FROM sched
WHERE utid = $utid;
创建高效的表

CREATE PERFETTO TABLE 允许定义针对跟踪分析查询优化的表。这些表比使用 CREATE TABLE 创建的 SQLite 表性能更高、内存效率更高。

Note however the full feature set of CREATE TABLE is not supported:
但请注意, CREATE TABLE 功能集并不完全支持:

  1. Perfetto 表在创建后无法插入并且是只读的
  2. Perfetto 表必须使用 SELECT 语句进行定义和填充。它们不能由列名和类型定义。

例如:

-- Create a Perfetto table with constant values.
CREATE PERFETTO TABLE constant_table AS
SELECT column1 as ts, column2 as dur
FROM (
  VALUES
  (100, 10),
  (200, 20)
);

-- Create a Perfetto table with a query on another table.
CREATE PERFETTO TABLE slice_sub_table AS
SELECT *
FROM slice
WHERE name = 'foo';

#####################以上分割线#####################

后记:
1 本次主要使用百度翻译,虽然被骂,但至少翻译这个工具降低了门槛。
2 英文文档中的长难句真的是又长又难,基于百度的翻译,然后自己再调整下,水平实在有限。
3 技术背景知识不够,有些专有名词不知道怎么翻译,也不知道百度翻译的是否准确,功夫在诗外。
4 万事开头难,中间难不难,还不知道。中间的事后面再说,正确一天翻译一篇。
5 虽然可能会有人不屑,但总要有人去做不起眼的小事。
6 google 厉害,这个perfetto 工具也很厉害。君子善假于物也。
7 工具的使用是最简单的入门,背后还有更多的东西值得学习。
8 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议

上一篇 下一篇

猜你喜欢

热点阅读