このトピックでは、Nexmark を使用して Realtime Compute for Apache Flink のパフォーマンスをテストする方法について説明します。
パフォーマンス
Realtime Compute for Apache Flink で 1 計算ユニット (CU) の計算リソース構成を使用した場合、19 の Nexmark クエリのパフォーマンスは、最小で 5,000 レコード/秒 (RPS) から最大で 55,000 RPS の範囲になります。
単一ストリームのフィルタリングや文字列変換などの単純な操作の場合、1 CU で 1 秒あたり 40,000 から 55,000 レコードを処理できます。
JOIN、GROUP BY、ウィンドウ関数操作などの複雑な操作の場合、1 CU で 1 秒あたり 5,000 から 10,000 レコードを処理できます。
前提条件
Java 開発キット (JDK) 1.8.x 以降のバージョンがインストールされている必要があります。
Maven 3.8.2 がインストールされています。
Git がインストールされている必要があります。Git をダウンロードするには、Git をご参照ください。
Nexmark がインストールされています。Nexmark の詳細については、「Nexmark」をご参照ください。
ワークスペースが作成されている必要があります。詳細については、「Realtime Compute for Apache Flink のアクティブ化」をご参照ください。
説明Nexmark と Git はサードパーティの Web サイトです。アクセスが遅延したり、失敗したりする場合があります。
テストツール

Nexmark ソーステーブル:テストに必要なトランザクション/秒 (TPS) に基づいてテストデータを生成します。
変換:Nexmark の 19 のクエリ。
Blackhole 結果テーブル:上流および下流のストレージによるパフォーマンスへの影響を除外し、Flink のパフォーマンスのテストに焦点を当てます。
データ準備
コマンドラインインターフェイス (CLI) で次のコマンドを実行して、Nexmark のソースコードをダウンロードし、コンパイルします。
cd <path> git clone https://github.com/nexmark/nexmark.git cd nexmark/nexmark-flink mvn clean package説明<path> は、nexmark.git ファイルが格納されるカスタムパスを指定します。
Nexmark コネクタを作成します。
対象のワークスペースの [操作] 列で、[コンソール] をクリックします。
[コネクタ]ページの右側で、[カスタムコネクタの作成]をクリックします。
表示されるダイアログボックスで、[ファイルの選択] をクリックします。次の図に例を示します。
説明パッケージは `/nexmark/nexmark-flink/target` ディレクトリにあります。nexmark-flink-0.2-SNAPSHOT.jar ファイルがコンパイル済みのパッケージです。
[次へ] をクリックし、次に [完了] をクリックします。
次の表に、Nexmark コネクタのパラメーターを示します。
パラメーター | パラメーター値 | 説明 |
first-event.rate | 10000000 | データ生成レート。 |
next-event.rate | ||
events.num | 100000000 | 生成するイベントの数。 |
bid.proportion | 92% | Bid イベントの割合。 |
auction.proportion | 6% | Auction イベントの割合。 |
person.proportion | 2% | Person イベントの割合。 |
テスト手順
次のクエリジョブを作成します。ジョブの作成方法の詳細については、「ジョブ開発マップ」をご参照ください。
q0
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
channel VARCHAR,
url VARCHAR,
dateTime TIMESTAMP(3),
extra VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction, bidder, price, channel, url, dateTime, extra
FROM
bid;q1
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price DECIMAL(23, 3),
channel VARCHAR,
url VARCHAR,
dateTime TIMESTAMP(3),
extra VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction,
bidder,
0.908 * price as price, -- ドルをユーロに変換
channel,
url,
dateTime,
extra
FROM
bid;q2
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
channel VARCHAR,
url VARCHAR,
dateTime TIMESTAMP(3),
extra VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction, bidder, price, channel, url, dateTime, extra
FROM
bid
WHERE
MOD(auction, 123) = 0;
q3
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (name VARCHAR, city VARCHAR, state VARCHAR, id BIGINT)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW person AS
SELECT
person.id,
person.name,
person.emailAddress,
person.creditCard,
person.city,
person.state,
dateTime,
person.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 0;
CREATE TEMPORARY VIEW auction AS
SELECT
auction.id,
auction.itemName,
auction.description,
auction.initialBid,
auction.reserve,
dateTime,
auction.expires,
auction.seller,
auction.category,
auction.extra
FROM
nexmark_table
WHERE
event_type = 1;
INSERT INTO discard_sink
SELECT
P.name, P.city, P.state, A.id
FROM
auction AS A
INNER JOIN person AS P
on A.seller = P.id
WHERE
A.category = 10
and(P.state = 'OR'
OR P.state = 'ID'
OR P.state = 'CA');
q4
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (id BIGINT, final BIGINT)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW auction AS
SELECT
auction.id,
auction.itemName,
auction.description,
auction.initialBid,
auction.reserve,
dateTime,
auction.expires,
auction.seller,
auction.category,
auction.extra
FROM
nexmark_table
WHERE
event_type = 1;
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
Q.category, AVG(Q.final)
FROM
(
SELECT
MAX(B.price) AS final, A.category
FROM
auction A, bid B
WHERE
A.id = B.auction
AND B.dateTime BETWEEN A.dateTime AND A.expires
GROUP BY
A.id, A.category
) Q
GROUP BY
Q.category;q5
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (auction BIGINT, num BIGINT)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
AuctionBids.auction, AuctionBids.num
FROM
(
SELECT
B1.auction,
count(*) AS num,
HOP_START(B1.dateTime, INTERVAL '2' SECOND, INTERVAL '10' SECOND) AS starttime,
HOP_END(B1.dateTime, INTERVAL '2' SECOND, INTERVAL '10' SECOND) AS endtime
FROM
bid B1
GROUP BY
B1.auction,
HOP(B1.dateTime, INTERVAL '2' SECOND, INTERVAL '10' SECOND)
) AS AuctionBids
JOIN (
SELECT
max(CountBids.num) AS maxn,
CountBids.starttime,
CountBids.endtime
FROM
(
SELECT
count(*) AS num,
HOP_START(B2.dateTime, INTERVAL '2' SECOND, INTERVAL '10' SECOND) AS starttime,
HOP_END(B2.dateTime, INTERVAL '2' SECOND, INTERVAL '10' SECOND) AS endtime
FROM
bid B2
GROUP BY
B2.auction,
HOP(B2.dateTime, INTERVAL '2' SECOND, INTERVAL '10' SECOND)
) AS CountBids
GROUP BY
CountBids.starttime, CountBids.endtime
) AS MaxBids
ON AuctionBids.starttime = MaxBids.starttime
AND AuctionBids.endtime = MaxBids.endtime
AND AuctionBids.num >= MaxBids.maxn;
q7
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
dateTime TIMESTAMP(3),
extra VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
B.auction, B.price, B.bidder, B.dateTime, B.extra
from
bid B
JOIN (
SELECT
MAX(B1.price) AS maxprice,
TUMBLE_ROWTIME(B1.dateTime, INTERVAL '10' SECOND) as dateTime
FROM
bid B1
GROUP BY
TUMBLE(B1.dateTime, INTERVAL '10' SECOND)
) B1
ON B.price = B1.maxprice
WHERE
B.dateTime BETWEEN B1.dateTime - INTERVAL '10' SECOND AND B1.dateTime;
q8
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (id BIGINT, name VARCHAR, stime TIMESTAMP(3))
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW person AS
SELECT
person.id,
person.name,
person.emailAddress,
person.creditCard,
person.city,
person.state,
dateTime,
person.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 0;
CREATE TEMPORARY VIEW auction AS
SELECT
auction.id,
auction.itemName,
auction.description,
auction.initialBid,
auction.reserve,
dateTime,
auction.expires,
auction.seller,
auction.category,
auction.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 1;
INSERT INTO discard_sink
SELECT
P.id, P.name, P.starttime
FROM
(
SELECT
P.id,
P.name,
TUMBLE_START(P.dateTime, INTERVAL '10' SECOND) AS starttime,
TUMBLE_END(P.dateTime, INTERVAL '10' SECOND) AS endtime
FROM
person P
GROUP BY
P.id,
P.name,
TUMBLE(P.dateTime, INTERVAL '10' SECOND)
) P
JOIN (
SELECT
A.seller,
TUMBLE_START(A.dateTime, INTERVAL '10' SECOND) AS starttime,
TUMBLE_END(A.dateTime, INTERVAL '10' SECOND) AS endtime
FROM
auction A
GROUP BY
A.seller,
TUMBLE(A.dateTime, INTERVAL '10' SECOND)
) A
ON P.id = A.seller
AND P.starttime = A.starttime
AND P.endtime = A.endtime;
q9
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
id BIGINT,
itemName VARCHAR,
description VARCHAR,
initialBid BIGINT,
reserve BIGINT,
dateTime TIMESTAMP(3),
expires TIMESTAMP(3),
seller BIGINT,
category BIGINT,
extra VARCHAR,
auction BIGINT,
bidder BIGINT,
price BIGINT,
bid_dateTime TIMESTAMP(3),
bid_extra VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW auction AS
SELECT
auction.id,
auction.itemName,
auction.description,
auction.initialBid,
auction.reserve,
dateTime,
auction.expires,
auction.seller,
auction.category,
auction.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 1;
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
id,
itemName,
description,
initialBid,
reserve,
dateTime,
expires,
seller,
category,
extra,
auction,
bidder,
price,
bid_dateTime,
bid_extra
FROM
(
SELECT
A.*,
B.auction,
B.bidder,
B.price,
B.dateTime AS bid_dateTime,
B.extra AS bid_extra,
ROW_NUMBER()
OVER (
PARTITION BY
A.id
ORDER BY
B.price DESC, B.dateTime ASC
) AS rownum
FROM
auction A, bid B
WHERE
A.id = B.auction
AND B.dateTime BETWEEN A.dateTime AND A.expires
)
WHERE
rownum <= 1;q11
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
bidder BIGINT,
bid_count BIGINT,
starttime TIMESTAMP(3),
endtime TIMESTAMP(3)
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
B.bidder,
count(*) as bid_count,
SESSION_START(B.dateTime, INTERVAL '10' SECOND) as starttime,
SESSION_END(B.dateTime, INTERVAL '10' SECOND) as endtime
FROM
bid B
GROUP BY
B.bidder, SESSION(B.dateTime, INTERVAL '10' SECOND);q12
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
bidder BIGINT,
bid_count BIGINT,
starttime TIMESTAMP(3),
endtime TIMESTAMP(3)
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
B.bidder,
count(*) as bid_count,
TUMBLE_START(B.p_time, INTERVAL '10' SECOND) as starttime,
TUMBLE_END(B.p_time, INTERVAL '10' SECOND) as endtime
FROM
(
SELECT
*, PROCTIME() as p_time
FROM
bid
) B
GROUP BY
B.bidder, TUMBLE(B.p_time, INTERVAL '10' SECOND);
q15
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
`day` VARCHAR,
total_bids BIGINT,
rank1_bids BIGINT,
rank2_bids BIGINT,
rank3_bids BIGINT,
total_bidders BIGINT,
rank1_bidders BIGINT,
rank2_bidders BIGINT,
rank3_bidders BIGINT,
total_auctions BIGINT,
rank1_auctions BIGINT,
rank2_auctions BIGINT,
rank3_auctions BIGINT
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
DATE_FORMAT(dateTime, 'yyyy-MM-dd') as `day`,
count(*) AS total_bids,
count(*)
filter(where price < 10000) AS rank1_bids,
count(*)
filter(where price >= 10000
and price < 1000000) AS rank2_bids,
count(*)
filter(where price >= 1000000) AS rank3_bids,
count(distinct bidder) AS total_bidders,
count(distinct bidder)
filter(where price < 10000) AS rank1_bidders,
count(distinct bidder)
filter(where price >= 10000
and price < 1000000) AS rank2_bidders,
count(distinct bidder)
filter(where price >= 1000000) AS rank3_bidders,
count(distinct auction) AS total_auctions,
count(distinct auction)
filter(where price < 10000) AS rank1_auctions,
count(distinct auction)
filter(where price >= 10000
and price < 1000000) AS rank2_auctions,
count(distinct auction)
filter(where price >= 1000000) AS rank3_auctions
FROM
bid
GROUP BY
DATE_FORMAT(dateTime, 'yyyy-MM-dd');
q16
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
channel VARCHAR,
`day` VARCHAR,
`minute` VARCHAR,
total_bids BIGINT,
rank1_bids BIGINT,
rank2_bids BIGINT,
rank3_bids BIGINT,
total_bidders BIGINT,
rank1_bidders BIGINT,
rank2_bidders BIGINT,
rank3_bidders BIGINT,
total_auctions BIGINT,
rank1_auctions BIGINT,
rank2_auctions BIGINT,
rank3_auctions BIGINT
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
channel,
DATE_FORMAT(dateTime, 'yyyy-MM-dd') as `day`,
max(DATE_FORMAT(dateTime, 'HH:mm')) as `minute`,
count(*) AS total_bids,
count(*)
filter(where price < 10000) AS rank1_bids,
count(*)
filter(where price >= 10000
and price < 1000000) AS rank2_bids,
count(*)
filter(where price >= 1000000) AS rank3_bids,
count(distinct bidder) AS total_bidders,
count(distinct bidder)
filter(where price < 10000) AS rank1_bidders,
count(distinct bidder)
filter(where price >= 10000
and price < 1000000) AS rank2_bidders,
count(distinct bidder)
filter(where price >= 1000000) AS rank3_bidders,
count(distinct auction) AS total_auctions,
count(distinct auction)
filter(where price < 10000) AS rank1_auctions,
count(distinct auction)
filter(where price >= 10000
and price < 1000000) AS rank2_auctions,
count(distinct auction)
filter(where price >= 1000000) AS rank3_auctions
FROM
bid
GROUP BY
channel, DATE_FORMAT(dateTime, 'yyyy-MM-dd');
q17
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
`day` VARCHAR,
total_bids BIGINT,
rank1_bids BIGINT,
rank2_bids BIGINT,
rank3_bids BIGINT,
min_price BIGINT,
max_price BIGINT,
avg_price BIGINT,
sum_price BIGINT
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction,
DATE_FORMAT(dateTime, 'yyyy-MM-dd') as `day`,
count(*) AS total_bids,
count(*)
filter(where price < 10000) AS rank1_bids,
count(*)
filter(where price >= 10000
and price < 1000000) AS rank2_bids,
count(*)
filter(where price >= 1000000) AS rank3_bids,
min(price) AS min_price,
max(price) AS max_price,
avg(price) AS avg_price,
sum(price) AS sum_price
FROM
bid
GROUP BY
auction, DATE_FORMAT(dateTime, 'yyyy-MM-dd');q18
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
channel VARCHAR,
url VARCHAR,
dateTime TIMESTAMP(3),
extra VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction, bidder, price, channel, url, dateTime, extra
FROM
(
SELECT
*,
ROW_NUMBER()
OVER (
PARTITION BY
bidder, auction
ORDER BY
dateTime DESC
) AS rank_number
FROM
bid
)
WHERE
rank_number <= 1;
q19
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
channel VARCHAR,
url VARCHAR,
dateTime TIMESTAMP(3),
extra VARCHAR,
rank_number BIGINT
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER()
OVER (
PARTITION BY
auction
ORDER BY
price DESC
) AS rank_number
FROM
bid
)
WHERE
rank_number <= 10;q20
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
channel VARCHAR,
url VARCHAR,
bid_dateTime TIMESTAMP(3),
bid_extra VARCHAR,
itemName VARCHAR,
description VARCHAR,
initialBid BIGINT,
reserve BIGINT,
auction_dateTime TIMESTAMP(3),
expires TIMESTAMP(3),
seller BIGINT,
category BIGINT,
auction_extra VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW auction AS
SELECT
auction.id,
auction.itemName,
auction.description,
auction.initialBid,
auction.reserve,
dateTime,
auction.expires,
auction.seller,
auction.category,
auction.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 1;
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction,
bidder,
price,
channel,
url,
B.dateTime,
B.extra,
itemName,
description,
initialBid,
reserve,
A.dateTime,
expires,
seller,
category,
A.extra
FROM
bid AS B
INNER JOIN auction AS A
on B.auction = A.id
WHERE
A.category = 10;
q21
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
channel VARCHAR,
channel_id VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction,
bidder,
price,
channel,
CASE
WHEN lower(channel) = 'apple'
THEN '0'
WHEN lower(channel) = 'google'
THEN '1'
WHEN lower(channel) = 'facebook'
THEN '2'
WHEN lower(channel) = 'baidu'
THEN '3'
ELSE REGEXP_EXTRACT(url, '(&|^)channel_id=([^&]*)', 2)
END AS channel_id
FROM
bid
where
REGEXP_EXTRACT(url, '(&|^)channel_id=([^&]*)', 2) is not null
or lower(channel) in ('apple', 'google', 'facebook', 'baidu');q22
CREATE TEMPORARY TABLE nexmark_table (
event_type INT,
person ROW < id BIGINT, name VARCHAR, emailAddress VARCHAR, creditCard VARCHAR, city VARCHAR, state VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
auction ROW < id BIGINT, itemName VARCHAR, description VARCHAR, initialBid BIGINT, reserve BIGINT, dateTime TIMESTAMP(3), expires TIMESTAMP(3), seller BIGINT, category BIGINT, extra VARCHAR >,
bid ROW < auction BIGINT, bidder BIGINT, price BIGINT, channel VARCHAR, url VARCHAR, dateTime TIMESTAMP(3), extra VARCHAR >,
dateTime AS CASE
WHEN event_type = 0
THEN person.dateTime
WHEN event_type = 1
THEN auction.dateTime
ELSE bid.dateTime
END,
WATERMARK FOR dateTime AS dateTime - INTERVAL '4' SECOND
)
WITH (
'connector' = 'nexmark',
'first-event.rate' = '10000000',
'next-event.rate' = '10000000',
'events.num' = '100000000',
'person.proportion' = '2',
'auction.proportion' = '6',
'bid.proportion' = '92'
);
CREATE TEMPORARY TABLE discard_sink (
auction BIGINT,
bidder BIGINT,
price BIGINT,
channel VARCHAR,
dir1 VARCHAR,
dir2 VARCHAR,
dir3 VARCHAR
)
WITH ('connector' = 'blackhole');
CREATE TEMPORARY VIEW bid AS
SELECT
bid.auction,
bid.bidder,
bid.price,
bid.channel,
bid.url,
dateTime,
bid.extra
FROM
`vvp`.`default`.nexmark_table
WHERE
event_type = 2;
INSERT INTO discard_sink
SELECT
auction,
bidder,
price,
channel,
SPLIT_INDEX(url, '/', 3) as dir1,
SPLIT_INDEX(url, '/', 4) as dir2,
SPLIT_INDEX(url, '/', 5) as dir3
FROM
bid;
右側のタブをクリックし、[その他の設定] で [エンジンバージョン] を [Vvr-6.0.4-flink-1.15] に設定します。
SQL エディターの右上隅にある [デプロイ] をクリックします。
ページで、対象のジョブをクリックします。[デプロイメント詳細] タブの [リソース設定] セクションで、右上隅にある [編集] をクリックします。[並列度] パラメーターを 1、[TaskManager メモリ] パラメーターを 4 GiB、[TaskManager CPU コア] パラメーターを 1 コアに設定します。次の図に構成を示します。

構成が完了したら、[リソース設定] セクションの右上隅にある [保存] をクリックします。
対象の各ジョブについて、[操作] 列の [開始] をクリックします。
対象のジョブのステータスが [完了] に変わったら、対象のジョブ名をクリックします。[実行中のイベント] タブで、以下に示すようにジョブの [開始時刻] と [終了時刻] を表示します。
開始時刻:ジョブが正常に開始されました。
終了時刻:ジョブが正常に終了しました。
期待される結果
[期間] は [終了時刻] と [開始時刻] の差です。[RPS] は [events.num] を [期間] で割った結果です。
クエリ | 開始時刻 | 終了時刻 | 期間 (秒) | RPS |
q0 | 2023-02-07 11:55:13 | 2023-02-07 12:26:00 | 1847 | 54,141 |
q1 | 2023-02-07 12:28:06 | 2023-02-07 12:58:53 | 1847 | 54,141 |
q2 | 2023-02-07 12:29:13 | 2023-02-07 13:00:02 | 1,849 | 54,083 |
q3 | 2023-02-07 12:47:12 | 2023-02-07 13:18:01 | 1849 | 54083 |
q4 | 2023-02-07 13:30:08 | 2023-02-07 14:04:46 | 2,078 | 48,123 |
q5 | 2023-02-07 14:15:07 | 2023-02-07 14:45:45 | 1838 | 54,406 |
q7 | 2023-02-07 14:24:13 | 2023-02-07 17:08:42 | 9,869 | 10,132 |
q8 | 2023-02-07 14:27:09 | 2023-02-07 14:57:47 | 1838 | 54,406 |
q9 | 2023-02-07 14:35:53 | 2023-02-07 15:38:16 | 3743 | 26716 |
q11 | 2023-02-07 14:38:14 | 2023-02-07 15:08:53 | 1839 | 54,377 |
q12 | 2023-02-07 14:40:36 | 2023-02-07 15:11:15 | 1839 秒 | 54,377 |
q15 | 2023-02-07 14:42:43 | 2023-02-07 15:13:22 | 1839 | 54,377 |
q16 | 2023-02-07 14:46:17 | 2023-02-07 16:03:09 | 4,012 | 24,925 |
q17 | 2023-02-07 16:02:19 | 2023-02-07 16:33:07 | 1848 | 54112 |
q18 | 2023-02-07 16:04:43 | 2023-02-07 16:41:08 | 2,185 | 45,766 |
q19 | 2023-02-07 16:07:13 | 2023-02-07 16:40:01 | 1968 | 50,813 |
q20 | 2023-02-07 16:13:29 | 2023-02-07 16:59:13 | 2,744 | 36,443 |
q21 | 2023-02-07 16:16:32 | 2023-02-07 16:47:11 | 1849 | 54,083 |
q22 | 2023-02-07 16:18:53 | 2023-02-07 16:49:41 | 1848 | 54,112 |