前言:虽然有翻译软件,虽然有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
功能集并不完全支持:
- Perfetto 表在创建后无法插入并且是只读的
- 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 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议
网友评论