diff --git a/.markdownlint.yaml b/.markdownlint.yaml
index 3c9b4c92a3..1bdcd8fce8 100644
--- a/.markdownlint.yaml
+++ b/.markdownlint.yaml
@@ -11,4 +11,4 @@ whitespace: true
MD010:
code_blocks: false # Disallow hard tabs except in code blocks.
MD033:
- allowed_elements: ["p"]
+ allowed_elements: ["p","br"]
diff --git a/docs/commands/search.sql b/docs/commands/search.sql
deleted file mode 100644
index f7465cfa80..0000000000
--- a/docs/commands/search.sql
+++ /dev/null
@@ -1,487 +0,0 @@
-SELECT count() FROM gha WHERE
- id LIKE '%in case you have any feedback 😊%'
-OR type LIKE '%in case you have any feedback 😊%'
-OR actor.login LIKE '%in case you have any feedback 😊%'
-OR actor.display_login LIKE '%in case you have any feedback 😊%'
-OR actor.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR actor.url LIKE '%in case you have any feedback 😊%'
-OR actor.avatar_url LIKE '%in case you have any feedback 😊%'
-OR repo.name LIKE '%in case you have any feedback 😊%'
-OR repo.url LIKE '%in case you have any feedback 😊%'
-OR payload.ref LIKE '%in case you have any feedback 😊%'
-OR payload.ref_type LIKE '%in case you have any feedback 😊%'
-OR payload.pusher_type LIKE '%in case you have any feedback 😊%'
-OR payload.head LIKE '%in case you have any feedback 😊%'
-OR payload.before LIKE '%in case you have any feedback 😊%'
-OR payload.master_branch LIKE '%in case you have any feedback 😊%'
-OR payload.description LIKE '%in case you have any feedback 😊%'
-OR payload.action LIKE '%in case you have any feedback 😊%'
-OR org.login LIKE '%in case you have any feedback 😊%'
-OR org.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR org.url LIKE '%in case you have any feedback 😊%'
-OR org.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.login LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.user.type LIKE '%in case you have any feedback 😊%'
-OR payload.review.body LIKE '%in case you have any feedback 😊%'
-OR payload.review.commit_id LIKE '%in case you have any feedback 😊%'
-OR payload.review.state LIKE '%in case you have any feedback 😊%'
-OR payload.review.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.pull_request_url LIKE '%in case you have any feedback 😊%'
-OR payload.review.author_association LIKE '%in case you have any feedback 😊%'
-OR payload.review._links.html.href LIKE '%in case you have any feedback 😊%'
-OR payload.review._links.pull_request.href LIKE '%in case you have any feedback 😊%'
-OR payload.comment.url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.login LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.user.type LIKE '%in case you have any feedback 😊%'
-OR payload.comment.path LIKE '%in case you have any feedback 😊%'
-OR payload.comment.commit_id LIKE '%in case you have any feedback 😊%'
-OR payload.comment.author_association LIKE '%in case you have any feedback 😊%'
-OR payload.comment.body LIKE '%in case you have any feedback 😊%'
-OR payload.comment.reactions.url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.issue_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.diff_hunk LIKE '%in case you have any feedback 😊%'
-OR payload.comment.original_commit_id LIKE '%in case you have any feedback 😊%'
-OR payload.comment.pull_request_url LIKE '%in case you have any feedback 😊%'
-OR payload.comment.start_side LIKE '%in case you have any feedback 😊%'
-OR payload.comment.side LIKE '%in case you have any feedback 😊%'
-OR payload.issue.url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.repository_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.labels_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.comments_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.title LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.login LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.user.type LIKE '%in case you have any feedback 😊%'
-OR payload.issue.state LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.login LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.assignee.type LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.labels_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.title LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.description LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.login LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.creator.type LIKE '%in case you have any feedback 😊%'
-OR payload.issue.milestone.state LIKE '%in case you have any feedback 😊%'
-OR payload.issue.author_association LIKE '%in case you have any feedback 😊%'
-OR payload.issue.active_lock_reason LIKE '%in case you have any feedback 😊%'
-OR payload.issue.body LIKE '%in case you have any feedback 😊%'
-OR payload.issue.reactions.url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.timeline_url LIKE '%in case you have any feedback 😊%'
-OR payload.issue.state_reason LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.diff_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.patch_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.issue_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.state LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.title LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.login LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.user.type LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.body LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merge_commit_sha LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.commits_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.review_comments_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.review_comment_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.comments_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.statuses_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.label LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.ref LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.sha LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.login LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.user.type LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.name LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.full_name LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.login LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.owner.type LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.description LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.forks_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.keys_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.collaborators_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.teams_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.hooks_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.issue_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.assignees_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.branches_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.tags_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.blobs_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.git_tags_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.git_refs_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.trees_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.statuses_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.languages_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.stargazers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.contributors_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.subscribers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.subscription_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.commits_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.git_commits_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.comments_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.issue_comment_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.contents_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.compare_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.merges_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.archive_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.downloads_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.issues_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.pulls_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.milestones_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.notifications_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.labels_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.releases_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.deployments_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.git_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.ssh_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.clone_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.svn_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.homepage LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.language LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.mirror_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.visibility LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.head.repo.default_branch LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.label LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.ref LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.sha LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.login LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.user.type LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.name LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.full_name LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.login LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.owner.type LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.description LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.forks_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.keys_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.collaborators_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.teams_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.hooks_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.issue_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.assignees_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.branches_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.tags_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.blobs_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.git_tags_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.git_refs_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.trees_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.statuses_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.languages_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.stargazers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.contributors_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.subscribers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.subscription_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.commits_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.git_commits_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.comments_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.issue_comment_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.contents_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.compare_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.merges_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.archive_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.downloads_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.issues_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.pulls_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.milestones_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.notifications_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.labels_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.releases_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.deployments_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.git_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.ssh_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.clone_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.svn_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.homepage LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.language LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.mirror_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.visibility LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.base.repo.default_branch LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.self.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.html.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.issue.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.comments.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.review_comments.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.review_comment.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.commits.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request._links.statuses.href LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.author_association LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.active_lock_reason LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.mergeable_state LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.login LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.pull_request.merged_by.type LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.name LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.full_name LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.login LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.owner.type LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.description LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.forks_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.keys_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.collaborators_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.teams_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.hooks_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.issue_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.assignees_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.branches_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.tags_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.blobs_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.git_tags_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.git_refs_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.trees_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.statuses_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.languages_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.stargazers_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.contributors_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.subscribers_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.subscription_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.commits_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.git_commits_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.comments_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.issue_comment_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.contents_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.compare_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.merges_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.archive_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.downloads_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.issues_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.pulls_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.milestones_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.notifications_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.labels_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.releases_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.deployments_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.git_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.ssh_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.clone_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.svn_url LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.homepage LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.visibility LIKE '%in case you have any feedback 😊%'
-OR payload.forkee.default_branch LIKE '%in case you have any feedback 😊%'
-OR payload.release.url LIKE '%in case you have any feedback 😊%'
-OR payload.release.assets_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.upload_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.login LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.author.type LIKE '%in case you have any feedback 😊%'
-OR payload.release.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.release.tag_name LIKE '%in case you have any feedback 😊%'
-OR payload.release.target_commitish LIKE '%in case you have any feedback 😊%'
-OR payload.release.name LIKE '%in case you have any feedback 😊%'
-OR payload.release.tarball_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.zipball_url LIKE '%in case you have any feedback 😊%'
-OR payload.release.body LIKE '%in case you have any feedback 😊%'
-OR payload.release.short_description_html LIKE '%in case you have any feedback 😊%'
-OR payload.release.discussion_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.login LIKE '%in case you have any feedback 😊%'
-OR payload.member.node_id LIKE '%in case you have any feedback 😊%'
-OR payload.member.avatar_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.gravatar_id LIKE '%in case you have any feedback 😊%'
-OR payload.member.url LIKE '%in case you have any feedback 😊%'
-OR payload.member.html_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.followers_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.following_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.gists_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.starred_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.subscriptions_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.organizations_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.repos_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.events_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.received_events_url LIKE '%in case you have any feedback 😊%'
-OR payload.member.type LIKE '%in case you have any feedback 😊%'
diff --git a/docs/commands/super.md b/docs/commands/super.md
index 41eaa2d839..ce229ec465 100644
--- a/docs/commands/super.md
+++ b/docs/commands/super.md
@@ -659,20 +659,34 @@ the `super` command, but it turns out that `super` can hold its own when
compared to other analytics systems.
To illustrate comparative performance, we'll present some informal performance
-measurements among `super`,
-[`DuckDB`](https://duckdb.org/),
-[`ClickHouse`](https://clickhouse.com/), and
-[`DataFusion`](https://datafusion.apache.org/).
+measurements among SuperDB,
+[DuckDB](https://duckdb.org/),
+[ClickHouse](https://clickhouse.com/), and
+[DataFusion](https://datafusion.apache.org/).
We'll use the Parquet format to compare apples to apples
and also report results for the custom columnar database format of DuckDB
-and the Super Binary format used by `super`.
-We tried loading our test data into a ClickHouse table using its
-[new experimental JSON type](https://clickhouse.com/blog/a-new-powerful-json-data-type-for-clickhouse)
-but those attempts failed with "too many open files".
+and the [Super Binary](../formats/bsup.md) format used by `super`.
-As of this writing in November 2024, we're using the latest version 1.1.3 of `duckdb`.
-version 24.11.1.1393 of `clickhouse`, and v43.0.0 of `datafusion-cli`.
+We also experimented with loading our test data into a ClickHouse table using its
+[new beta JSON type](https://clickhouse.com/blog/a-new-powerful-json-data-type-for-clickhouse).
+Preliminary results showed a mix of good performance and failed queries.
+We'll provide more detail on these tests soon.
+
+The detailed steps shown [below](#appendix-2-running-the-tests) can be reproduced via
+[automated scripts](https://github.com/brimdata/super/blob/main/scripts/super-cmd-perf).
+As of this writing in November 2024, [results](#the-test-results) were gathered on an AWS
+[`m6idn.2xlarge`](https://aws.amazon.com/ec2/instance-types/m6i/) instance
+with the following software versions:
+
+|**Software**|**Version**|
+|-|-|
+|`super`|Commit `31760cd`|
+|`duckdb`|`v1.1.3` 19864453f7|
+|`datafusion-cli`|datafusion-cli `43.0.0`|
+|`clickhouse`|ClickHouse local version `24.10.3.21` (official build)|
+
+The complete run logs are [archived here](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-11-26_03-17-25.tgz).
### The Test Data
@@ -690,7 +704,7 @@ wget https://data.gharchive.org/2023-02-08-1.json.gz
wget https://data.gharchive.org/2023-02-08-23.json.gz
```
We downloaded these files into a directory called `gharchive_gz`
-and created a duckdb database file called `gha.db` and a table called `gha`
+and created a DuckDB database file called `gha.db` and a table called `gha`
using this command:
```
duckdb gha.db -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', union_by_name=true)"
@@ -704,15 +718,15 @@ We then created a Parquet file called `gha.parquet` with this command:
duckdb gha.db -c "COPY (from gha) TO 'gha.parquet'"
```
To create a super-structed file for the `super` command, there is no need to
-fuse the data into a single schema (though `super` can still work with the fused
+[`fuse`](../language/operators/fuse.md) the data into a single schema (though `super` can still work with the fused
schema in the Parquet file), and we simply ran this command to create a Super Binary
file:
```
super gharchive_gz/*.json.gz > gha.bsup
```
This code path in `super` is not multi-threaded so not particularly performant but,
-on our test machine, it takes about the same time as the `duckdb` method of creating
-a schema-fused table.
+on our test machine, this runs more than 2x faster than the `duckdb` method of
+creating a schema-fused table.
Here are the resulting file sizes:
```
@@ -731,11 +745,11 @@ The test queries involve these patterns:
* count by field aggregation
* rank over union of disparate field types
-We will call these tests `search`, `search+`, `count`, `agg`, and `union`, respectively
+We will call these tests [search](#search), [search+](#search-1), [count](#count), [agg](#agg), and [union](#union), respectively
#### Search
-For the search test, we'll search for the string pattern
+For the _search_ test, we'll search for the string pattern
```
"in case you have any feedback 😊"
```
@@ -750,9 +764,10 @@ SELECT count()
FROM 'gha.parquet' -- or gha
WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
```
-SuperSQL has a function called `grep` that is similar to the SQL `LIKE` clause but
-can operate over specified fields or default to all the string fields in any value.
-The SuperSQL query is
+SuperSQL supports `LIKE` and could run this plain SQL query, but it also has a
+similar function called [`grep`](../language/functions/grep.md) that can operate over specified fields or
+default to all the string fields in any value. The SuperSQL query that uses
+`grep` is
```sql
SELECT count()
FROM 'gha.bsup'
@@ -774,14 +789,21 @@ WHERE id LIKE '%in case you have any feedback 😊%'
OR payload.member.type LIKE '%in case you have any feedback 😊%'
```
There are 486 such fields. You can review the entire query in
-[docs/commands/search.sql](search.sql).
+[`search+.sql`](https://github.com/brimdata/super/blob/main/scripts/super-cmd-perf/search%2B.sql).
+
+In SuperSQL, `grep` allows for a much shorter query.
+```sql
+SELLECT count()
+FROM 'gha.bsup'
+WHERE grep('in case you have any feedback 😊')
+```
#### Count
-In the `count` test, we filter the input with a WHERE clause and count the results.
+In the _count_ test, we filter the input with a `WHERE` clause and count the results.
We chose a random GitHub user name for the filter.
This query has the form:
-```
+```sql
SELECT count()
FROM 'gha.parquet' -- or gha or 'gha.bsup'
WHERE actor.login='johnbieren'"
@@ -789,10 +811,10 @@ WHERE actor.login='johnbieren'"
#### Agg
-In the `agg` test, we filter the input and count the results grouped by the field `type`
+In the _agg_ test, we filter the input and count the results grouped by the field `type`
as in the DuckDB blog.
This query has the form:
-```
+```sql
SELECT count(),type
FROM 'gha.parquet' -- or 'gha' or 'gha.bsup'
WHERE repo.name='duckdb/duckdb'
@@ -801,7 +823,7 @@ GROUP BY type
#### Union
-The `union` test is straight out of the DuckDB blog at the end of
+The _union_ test is straight out of the DuckDB blog at the end of
[this section](https://duckdb.org/2023/03/03/json.html#handling-inconsistent-json-schemas).
This query computes the GitHub users that were assigned as a PR reviewer the most often
and returns the top 5 such users.
@@ -814,10 +836,10 @@ This query is:
```sql
WITH assignees AS (
SELECT payload.pull_request.assignee.login assignee
- FROM 'gha.parquet'
+ FROM 'gha.parquet' -- or 'gha'
UNION ALL
SELECT unnest(payload.pull_request.assignees).login assignee
- FROM 'gha.parquet'
+ FROM 'gha.parquet' -- or 'gha'
)
SELECT assignee, count(*) count
FROM assignees
@@ -833,19 +855,19 @@ FROM 'gha.parquet'
```
as
```sql
-SELECT rec.login as assignee FROM (
- SELECT unnest(payload.pull_request.assignees) rec
+SELECT object.login as assignee FROM (
+ SELECT unnest(payload.pull_request.assignees) object
FROM 'gha.parquet'
)
```
and for ClickHouse, we had to use `arrayJoin` instead of `unnest`.
-SuperSQL's data model does not require these sorts of gymnastics as
+SuperSQL's data model does not require these kinds of gymnastics as
everything does not have to be jammed into a table. Instead, we can use the
-`UNNEST` pipe operator combined with the spread operator applied to the array of
+`UNNEST` pipe operator combined with the [spread operator](../language/expressions.md#array-expressions) applied to the array of
string fields to easily produce a stream of string values representing the
assignees. Then we simply aggregate the assignee stream:
-```
+```sql
FROM 'gha.bsup'
| UNNEST [...payload.pull_request.assignees, payload.pull_request.assignee]
| WHERE this IS NOT NULL
@@ -856,30 +878,32 @@ FROM 'gha.bsup'
### The Test Results
-The following table summarizes the results of each test as a column and
-each tool as a row with the speed-up factor shown in parentheses:
+The following table summarizes the query performance for each tool as recorded in the
+[most recent archived run](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-11-26_03-17-25.tgz).
+The run time for each query in seconds is shown along with the speed-up factor
+in parentheses:
-| tool | format | search | search+ | count | agg | union |
-|--------------|---------------|---------------|---------------|----|------|-------|
-| `super` | `bsup` | 3.2 (2.6X) | 6.7 (3.6X) | 3.2 (0.04X) | 3.1 (0.04X) | 3.8 (117X) |
-| `super` | `parquet` | note 1 | note 1 | 0.18 (0.7X) | 0.27 (0.4X) | note 2 |
-| `duckdb` | `db` | 8.2 | 24 | 0.13 | 0.12 | 446 |
-| `duckdb` | `parquet` | 8.4 (1) | 23 (1X) | 0.26 (0.5X) | 0.21 (0.6X) | 419 (1.1X) |
-| `datafusion` | `parquet` | 9.1 (0.9X) | 18 (1.3X) | 0.24 (0.5X) | 0.24 (0.5X) | 40 (11x) |
-| `clickhouse` | `parquet` | 56 (0.1X) | 463 (0.1X) | 1 (0.1X) | 0.91 (0.1X) | 66 (7X) |
+|**Tool**|**Format**|**search**|**search+**|**count**|**agg**|**union**|
+|-|-|-|-|-|-|-|
+|`super`|`bsup`|6.3
(1.9x)|14.3
(1.4x)|5.7
(0.03x)|5.6
(0.03x)|8.2
(63x)|
+|`super`|`parquet`|note 1|note 1|0.3
(0.6x)|0.5
(0.3x)|note 2|
+|`duckdb`|`db`|12.1|19.8|0.2|0.14|519|
+|`duckdb`|`parquet`|12.9
(0.9x)|21.2
(0.9x)|0.4
(0.4x)|0.3
(0.5x)|499
(1x)|
+|`datafusion`|`parquet`|11.1
(1.1x)|21.1
(0.9x)|0.4
(0.5x)|0.4
(0.4x)|24.3
(21x)|
+|`clickhouse`|`parquet`|68
(0.2x)|845
(0.02x)|1
(0.2x)|0.9
(0.2x)|70
(7x)|
_Note 1: the `super` vectorized runtime does not yet support `grep`_
_Note 2: the `super` vectorized runtime does not yet support array expressions_
Since DuckDB with its native format is overall the best performing,
-we used it as the baseline for all of the speedup factors.
+we used it as the baseline for all of the speed-up factors.
To summarize,
`super` with Super Binary is substantially faster than the relational systems for
the search use cases and performs on par with the others for traditional OLAP queries,
-except for the union query, where the super-structured data model trounces the relational
-model (by over 100X!) for stitching together disparate data types for analysis in an aggregation.
+except for the _union_ query, where the super-structured data model trounces the relational
+model (by over 60x!) for stitching together disparate data types for analysis in an aggregation.
## Appendix 1: Preparing the Test Data
@@ -923,16 +947,16 @@ FROM (
Hmm, now `duckdb` runs out of memory.
We then thought we'd see if the sampling algorithm of `read_json` is more efficient,
-so we ran tried this command with successively larger sample sizes:
+so we tried this command with successively larger sample sizes:
```
duckdb scratch -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', sample_size=1000000)"
```
-even with a million rows as the sample, `duckdb` fails with
+Even with a million rows as the sample, `duckdb` fails with
```
Invalid Input Error: JSON transform error in file "gharchive_gz/2023-02-08-14.json.gz", in line 49745: Object {"issues":"write","metadata":"read","pull_requests... has unknown key "repository_hooks"
Try increasing 'sample_size', reducing 'maximum_depth', specifying 'columns', 'format' or 'records' manually, setting 'ignore_errors' to true, or setting 'union_by_name' to true when reading multiple files with a different structure.
```
-Ok, there 4434953 JSON objects in the input so let's try this:
+Ok, there 4,434,953 JSON objects in the input so let's try this:
```
duckdb gha.db -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', sample_size=4434953)"
```
@@ -947,344 +971,595 @@ Sure enough, this works:
```
duckdb gha.db -c "CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', union_by_name=true)"
```
-We now have the `duckdb` database file for our GitHub Archive data called `gha.db`
+We now have the DuckDB database file for our GitHub Archive data called `gha.db`
containing a single table called `gha` embedded in that database.
What about the super-structured
format for the `super` command? There is no need to futz with sample sizes,
-schema inference, or union by name, just run this to create a Super Binary file:
+schema inference, or union by name. Just run this to create a Super Binary file:
```
super gharchive_gz/*.json.gz > gha.bsup
```
## Appendix 2: Running the Tests
-This appendix provides the raw tests and output that we run on a MacBook Pro to generate
-the table of results above.
+This appendix provides the raw tests and output from the [most recent archived run](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-11-26_03-17-25.tgz)
+of the tests via [automated scripts](https://github.com/brimdata/super/blob/main/scripts/super-cmd-perf)
+on an AWS [`m6idn.2xlarge`](https://aws.amazon.com/ec2/instance-types/m6i/) instance.
### Search Test
```
-; time super -c "
- SELECT count()
- FROM 'gha.bsup'
- WHERE grep('in case you have any feedback 😊', payload.pull_request.body)
-"
-{count:2(uint64)}
-super -c 12.70s user 0.69s system 415% cpu 3.223 total
+About to execute
+================
+clickhouse --queries-file /mnt/tmpdir/tmp.0REdlePG3O
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
-time duckdb gha.db -c "
- SELECT count()
- FROM gha
- WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
-"
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.0REdlePG3O'
+Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.0REdlePG3O
+2
+ Time (abs ≡): 68.250 s [User: 67.960 s, System: 3.333 s]
+
+About to execute
+================
+datafusion-cli --file /mnt/tmpdir/tmp.TO5M8YolwM
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.TO5M8YolwM'
+Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.TO5M8YolwM
+DataFusion CLI v43.0.0
++---------+
+| count() |
++---------+
+| 2 |
++---------+
+1 row(s) fetched.
+Elapsed 10.942 seconds.
+
+ Time (abs ≡): 11.130 s [User: 65.904 s, System: 11.389 s]
+
+About to execute
+================
+duckdb /mnt/gha.db < /mnt/tmpdir/tmp.GxPkGbQK8Y
+
+With query
+==========
+SELECT count()
+FROM 'gha'
+WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.GxPkGbQK8Y'
+Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.GxPkGbQK8Y
┌──────────────┐
│ count_star() │
│ int64 │
├──────────────┤
│ 2 │
└──────────────┘
-duckdb gha.db -c 26.66s user 6.90s system 406% cpu 8.266 total
+ Time (abs ≡): 12.142 s [User: 81.132 s, System: 8.426 s]
+
+About to execute
+================
+duckdb < /mnt/tmpdir/tmp.EtIuukLt2w
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
-; time duckdb -c "
- SELECT count()
- FROM gha.parquet
- WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
-"
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.EtIuukLt2w'
+Benchmark 1: duckdb < /mnt/tmpdir/tmp.EtIuukLt2w
┌──────────────┐
│ count_star() │
│ int64 │
├──────────────┤
│ 2 │
└──────────────┘
-duckdb -c 42.71s user 6.06s system 582% cpu 8.380 total
+ Time (abs ≡): 12.890 s [User: 86.998 s, System: 6.305 s]
+
+About to execute
+================
+super -z -I /mnt/tmpdir/tmp.JfLwNNwBeG
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.bsup'
+WHERE grep('in case you have any feedback 😊', payload.pull_request.body)
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.JfLwNNwBeG'
+Benchmark 1: super -z -I /mnt/tmpdir/tmp.JfLwNNwBeG
+{count:2(uint64)}
+ Time (abs ≡): 6.325 s [User: 23.018 s, System: 1.652 s]
+```
+### Search+ Test
+
+```
+About to execute
+================
+clickhouse --queries-file /mnt/tmpdir/tmp.QRmnp0x8FT
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE
+ id LIKE '%in case you have any feedback 😊%'
+ OR type LIKE '%in case you have any feedback 😊%'
+...
+ OR payload.member.type LIKE '%in case you have any feedback 😊%'
-; time datafusion-cli -c "
- SELECT count()
- FROM 'gha.parquet'
- WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
-"
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.QRmnp0x8FT'
+Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.QRmnp0x8FT
+3
+ Time (abs ≡): 844.648 s [User: 923.669 s, System: 19.038 s]
+
+About to execute
+================
+datafusion-cli --file /mnt/tmpdir/tmp.NZ6GD2NGSD
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE
+ id LIKE '%in case you have any feedback 😊%'
+ OR type LIKE '%in case you have any feedback 😊%'
+ ...
+ OR payload.member.type LIKE '%in case you have any feedback 😊%'
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.NZ6GD2NGSD'
+Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.NZ6GD2NGSD
DataFusion CLI v43.0.0
+---------+
| count() |
+---------+
-| 2 |
+| 3 |
+---------+
-1 row(s) fetched.
-Elapsed 8.819 seconds.
+1 row(s) fetched.
+Elapsed 20.913 seconds.
-datafusion-cli -c 40.75s user 6.72s system 521% cpu 9.106 total
+ Time (abs ≡): 21.127 s [User: 126.933 s, System: 19.620 s]
+
+About to execute
+================
+duckdb /mnt/gha.db < /mnt/tmpdir/tmp.fmZ4sHQJOv
-; time clickhouse -q "
- SELECT count()
- FROM 'gha.parquet'
- WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
-"
-2
-clickhouse -q 50.81s user 1.83s system 94% cpu 55.994 total
-```
-
-### Search+ Test
-
-```
-; time super -c "
- SELECT count()
- FROM 'gha.bsup'
- WHERE grep('in case you have any feedback 😊')
-"
-{count:3(uint64)}
-super -c 43.80s user 0.71s system 669% cpu 6.653 total
-
-; time duckdb gha.db < search.sql
+With query
+==========
+SELECT count()
+FROM 'gha'
+WHERE
+ id LIKE '%in case you have any feedback 😊%'
+ OR type LIKE '%in case you have any feedback 😊%'
+ ...
+ OR payload.member.type LIKE '%in case you have any feedback 😊%'
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.fmZ4sHQJOv'
+Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.fmZ4sHQJOv
┌──────────────┐
│ count_star() │
│ int64 │
├──────────────┤
│ 3 │
└──────────────┘
-duckdb gha.db < search.sql 73.60s user 33.29s system 435% cpu 24.563 total
-
-; time duckdb < search-parquet.sql
+ Time (abs ≡): 19.796 s [User: 140.238 s, System: 9.686 s]
+
+About to execute
+================
+duckdb < /mnt/tmpdir/tmp.hE8ZzAlSRQ
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE
+ id LIKE '%in case you have any feedback 😊%'
+ OR type LIKE '%in case you have any feedback 😊%'
+ ...
+ OR payload.member.type LIKE '%in case you have any feedback 😊%'
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.hE8ZzAlSRQ'
+Benchmark 1: duckdb < /mnt/tmpdir/tmp.hE8ZzAlSRQ
┌──────────────┐
│ count_star() │
│ int64 │
├──────────────┤
│ 3 │
└──────────────┘
-duckdb < search-parquet.sql 89.57s user 29.21s system 513% cpu 23.113 total
+ Time (abs ≡): 21.210 s [User: 143.903 s, System: 9.179 s]
+
+About to execute
+================
+super -z -I /mnt/tmpdir/tmp.ncLqBOUkXD
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.bsup'
+WHERE grep('in case you have any feedback 😊')
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.ncLqBOUkXD'
+Benchmark 1: super -z -I /mnt/tmpdir/tmp.ncLqBOUkXD
+{count:3(uint64)}
+ Time (abs ≡): 14.267 s [User: 105.204 s, System: 1.698 s]
+```
-; time datafusion-cli -f search-parquet.sql
+### Count Test
+
+```
+About to execute
+================
+clickhouse --queries-file /mnt/tmpdir/tmp.xpShnx3ftw
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE actor.login='johnbieren'
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.xpShnx3ftw'
+Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.xpShnx3ftw
+879
+ Time (abs ≡): 1.034 s [User: 0.822 s, System: 0.233 s]
+
+About to execute
+================
+datafusion-cli --file /mnt/tmpdir/tmp.eO6Lt0jBbs
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE actor.login='johnbieren'
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.eO6Lt0jBbs'
+Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.eO6Lt0jBbs
DataFusion CLI v43.0.0
+---------+
| count() |
+---------+
-| 3 |
+| 879 |
+---------+
-1 row(s) fetched.
-Elapsed 18.184 seconds.
-datafusion-cli -f search-parquet.sql 83.84s user 11.13s system 513% cpu 18.494 total
+1 row(s) fetched.
+Elapsed 0.340 seconds.
-; time clickhouse --queries-file search-parquet.sql
-3
-clickhouse --queries-file search-parquet.sql 515.68s user 5.50s system 112% cpu 7:43.37 total
-```
-### Count Test
+ Time (abs ≡): 0.381 s [User: 1.578 s, System: 0.411 s]
+
+About to execute
+================
+duckdb /mnt/gha.db < /mnt/tmpdir/tmp.dEgCWl2Iem
-```
-; time super -c "
- SELECT count()
- FROM 'gha.bsup'
- WHERE actor.login='johnbieren'
-"
-{count:879(uint64)}
-super -c 13.81s user 0.71s system 449% cpu 3.233 total
-
-; time SUPER_VAM=1 super -c "
- SELECT count()
- FROM 'gha.parquet'
- WHERE actor.login='johnbieren'
-"
-{count:879(uint64)}
-SUPER_VAM=1 super -c 0.43s user 0.08s system 277% cpu 0.182 total
+With query
+==========
+SELECT count()
+FROM 'gha'
+WHERE actor.login='johnbieren'
-; time duckdb gha.db -c "
- SELECT count()
- FROM gha
- WHERE actor.login='johnbieren'
-"
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.dEgCWl2Iem'
+Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.dEgCWl2Iem
┌──────────────┐
│ count_star() │
│ int64 │
├──────────────┤
│ 879 │
└──────────────┘
-duckdb gha.db -c 0.64s user 0.06s system 517% cpu 0.134 total
+ Time (abs ≡): 0.175 s [User: 1.042 s, System: 0.106 s]
+
+About to execute
+================
+duckdb < /mnt/tmpdir/tmp.GNGEkrs6IU
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE actor.login='johnbieren'
-; time duckdb -c "
- SELECT count()
- FROM 'gha.parquet'
- WHERE actor.login='johnbieren'
-"
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.GNGEkrs6IU'
+Benchmark 1: duckdb < /mnt/tmpdir/tmp.GNGEkrs6IU
┌──────────────┐
│ count_star() │
│ int64 │
├──────────────┤
│ 879 │
└──────────────┘
-duckdb gha.db -c 1.14s user 0.14s system 490% cpu 0.261 total
-
-DataFusion CLI v43.0.0
-+---------+
-| count() |
-+---------+
-| 879 |
-+---------+
-1 row(s) fetched.
-Elapsed 0.203 seconds.
+ Time (abs ≡): 0.423 s [User: 2.256 s, System: 0.181 s]
+
+About to execute
+================
+super -z -I /mnt/tmpdir/tmp.dyu0120H2m
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.bsup'
+WHERE actor.login='johnbieren'
-datafusion-cli -c 0.93s user 0.15s system 453% cpu 0.238 total
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.dyu0120H2m'
+Benchmark 1: super -z -I /mnt/tmpdir/tmp.dyu0120H2m
+{count:879(uint64)}
+ Time (abs ≡): 5.745 s [User: 17.240 s, System: 1.509 s]
+
+About to execute
+================
+SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.yogAuyCHWe
+
+With query
+==========
+SELECT count()
+FROM '/mnt/gha.parquet'
+WHERE actor.login='johnbieren'
-; time clickhouse -q "
- SELECT count()
- FROM 'gha.parquet'
- WHERE actor.login='johnbieren'
-"
-879
-clickhouse -q 0.86s user 0.07s system 93% cpu 1.001 total
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.yogAuyCHWe'
+Benchmark 1: SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.yogAuyCHWe
+{count:879(uint64)}
+ Time (abs ≡): 0.298 s [User: 0.769 s, System: 0.248 s]
```
### Agg Test
```
-; time super -c "
- SELECT count(),type
- FROM 'gha.bsup'
- WHERE repo.name='duckdb/duckdb'
- GROUP BY type
-"
-{type:"PullRequestReviewEvent",count:14(uint64)}
-{type:"IssueCommentEvent",count:30(uint64)}
-{type:"WatchEvent",count:29(uint64)}
-{type:"PullRequestEvent",count:35(uint64)}
-{type:"PushEvent",count:15(uint64)}
-{type:"IssuesEvent",count:9(uint64)}
-{type:"ForkEvent",count:3(uint64)}
-{type:"PullRequestReviewCommentEvent",count:7(uint64)}
-super -c 12.24s user 0.68s system 413% cpu 3.129 total
-
-; time SUPER_VAM=1 super -c "
- SELECT count(),type
- FROM 'gha.parquet'
- WHERE repo.name='duckdb/duckdb'
- GROUP BY type
-"
-{type:"IssueCommentEvent",count:30(uint64)}
-{type:"PullRequestEvent",count:35(uint64)}
-{type:"PushEvent",count:15(uint64)}
-{type:"WatchEvent",count:29(uint64)}
-{type:"PullRequestReviewEvent",count:14(uint64)}
-{type:"ForkEvent",count:3(uint64)}
-{type:"PullRequestReviewCommentEvent",count:7(uint64)}
-{type:"IssuesEvent",count:9(uint64)}
-SUPER_VAM=1 super -c 1.01s user 0.13s system 421% cpu 0.271 total
-
-; time duckdb gha.db -c "
- SELECT count(),type
- FROM gha
- WHERE repo.name='duckdb/duckdb'
- GROUP BY type
-"
+About to execute
+================
+clickhouse --queries-file /mnt/tmpdir/tmp.FNKcK1lhGU
+
+With query
+==========
+SELECT count(),type
+FROM '/mnt/gha.parquet'
+WHERE repo.name='duckdb/duckdb'
+GROUP BY type
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.FNKcK1lhGU'
+Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.FNKcK1lhGU
+30 IssueCommentEvent
+14 PullRequestReviewEvent
+15 PushEvent
+29 WatchEvent
+9 IssuesEvent
+7 PullRequestReviewCommentEvent
+3 ForkEvent
+35 PullRequestEvent
+ Time (abs ≡): 0.856 s [User: 0.741 s, System: 0.178 s]
+
+About to execute
+================
+datafusion-cli --file /mnt/tmpdir/tmp.cv7JPVFkc6
+
+With query
+==========
+SELECT count(),type
+FROM '/mnt/gha.parquet'
+WHERE repo.name='duckdb/duckdb'
+GROUP BY type
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.cv7JPVFkc6'
+Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.cv7JPVFkc6
+DataFusion CLI v43.0.0
++---------+-------------------------------+
+| count() | type |
++---------+-------------------------------+
+| 35 | PullRequestEvent |
+| 14 | PullRequestReviewEvent |
+| 7 | PullRequestReviewCommentEvent |
+| 3 | ForkEvent |
+| 15 | PushEvent |
+| 30 | IssueCommentEvent |
+| 9 | IssuesEvent |
+| 29 | WatchEvent |
++---------+-------------------------------+
+8 row(s) fetched.
+Elapsed 0.324 seconds.
+
+ Time (abs ≡): 0.354 s [User: 1.299 s, System: 0.413 s]
+
+About to execute
+================
+duckdb /mnt/gha.db < /mnt/tmpdir/tmp.qaqGNHoHPE
+
+With query
+==========
+SELECT count(),type
+FROM 'gha'
+WHERE repo.name='duckdb/duckdb'
+GROUP BY type
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.qaqGNHoHPE'
+Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.qaqGNHoHPE
┌──────────────┬───────────────────────────────┐
│ count_star() │ type │
│ int64 │ varchar │
├──────────────┼───────────────────────────────┤
│ 3 │ ForkEvent │
-│ 35 │ PullRequestEvent │
+│ 14 │ PullRequestReviewEvent │
│ 29 │ WatchEvent │
+│ 35 │ PullRequestEvent │
+│ 30 │ IssueCommentEvent │
│ 7 │ PullRequestReviewCommentEvent │
│ 15 │ PushEvent │
│ 9 │ IssuesEvent │
-│ 14 │ PullRequestReviewEvent │
-│ 30 │ IssueCommentEvent │
└──────────────┴───────────────────────────────┘
-duckdb gha.db -c 0.49s user 0.06s system 466% cpu 0.119 total
-
-; time duckdb -c "
- SELECT count(),type
- FROM 'gha.parquet'
- WHERE repo.name='duckdb/duckdb'
- GROUP BY type
-"
+ Time (abs ≡): 0.144 s [User: 0.770 s, System: 0.143 s]
+
+About to execute
+================
+duckdb < /mnt/tmpdir/tmp.3BIyBWjqG0
+
+With query
+==========
+SELECT count(),type
+FROM '/mnt/gha.parquet'
+WHERE repo.name='duckdb/duckdb'
+GROUP BY type
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.3BIyBWjqG0'
+Benchmark 1: duckdb < /mnt/tmpdir/tmp.3BIyBWjqG0
┌──────────────┬───────────────────────────────┐
│ count_star() │ type │
│ int64 │ varchar │
├──────────────┼───────────────────────────────┤
+│ 3 │ ForkEvent │
+│ 15 │ PushEvent │
│ 9 │ IssuesEvent │
│ 7 │ PullRequestReviewCommentEvent │
-│ 15 │ PushEvent │
│ 14 │ PullRequestReviewEvent │
-│ 3 │ ForkEvent │
│ 29 │ WatchEvent │
-│ 35 │ PullRequestEvent │
│ 30 │ IssueCommentEvent │
+│ 35 │ PullRequestEvent │
└──────────────┴───────────────────────────────┘
-duckdb -c 0.73s user 0.14s system 413% cpu 0.211 total
-
-; time datafusion-cli -c "
- SELECT count(),type
- FROM 'gha.parquet'
- WHERE repo.name='duckdb/duckdb'
- GROUP BY type
-"
-DataFusion CLI v43.0.0
-+---------+-------------------------------+
-| count() | type |
-+---------+-------------------------------+
-| 15 | PushEvent |
-| 35 | PullRequestEvent |
-| 7 | PullRequestReviewCommentEvent |
-| 14 | PullRequestReviewEvent |
-| 30 | IssueCommentEvent |
-| 9 | IssuesEvent |
-| 29 | WatchEvent |
-| 3 | ForkEvent |
-+---------+-------------------------------+
-8 row(s) fetched.
-Elapsed 0.200 seconds.
+ Time (abs ≡): 0.316 s [User: 1.473 s, System: 0.174 s]
+
+About to execute
+================
+super -z -I /mnt/tmpdir/tmp.QieGBDCfVB
+
+With query
+==========
+SELECT count(),type
+FROM '/mnt/gha.bsup'
+WHERE repo.name='duckdb/duckdb'
+GROUP BY type
-datafusion-cli -c 0.80s user 0.15s system 398% cpu 0.238 total
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.QieGBDCfVB'
+Benchmark 1: super -z -I /mnt/tmpdir/tmp.QieGBDCfVB
+{type:"IssuesEvent",count:9(uint64)}
+{type:"ForkEvent",count:3(uint64)}
+{type:"PullRequestReviewCommentEvent",count:7(uint64)}
+{type:"PullRequestReviewEvent",count:14(uint64)}
+{type:"IssueCommentEvent",count:30(uint64)}
+{type:"WatchEvent",count:29(uint64)}
+{type:"PullRequestEvent",count:35(uint64)}
+{type:"PushEvent",count:15(uint64)}
+ Time (abs ≡): 5.627 s [User: 15.358 s, System: 1.606 s]
+
+About to execute
+================
+SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.XI76knYAGz
+
+With query
+==========
+SELECT count(),type
+FROM '/mnt/gha.parquet'
+WHERE repo.name='duckdb/duckdb'
+GROUP BY type
-; time clickhouse -q "
- SELECT count(),type
- FROM 'gha.parquet'
- WHERE repo.name='duckdb/duckdb'
- GROUP BY type
-"
-30 IssueCommentEvent
-14 PullRequestReviewEvent
-15 PushEvent
-29 WatchEvent
-9 IssuesEvent
-7 PullRequestReviewCommentEvent
-3 ForkEvent
-35 PullRequestEvent
-clickhouse -q 0.77s user 0.11s system 97% cpu 0.908 total
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.XI76knYAGz'
+Benchmark 1: SUPER_VAM=1 super -z -I /mnt/tmpdir/tmp.XI76knYAGz
+{type:"PullRequestEvent",count:35(uint64)}
+{type:"IssueCommentEvent",count:30(uint64)}
+{type:"PushEvent",count:15(uint64)}
+{type:"IssuesEvent",count:9(uint64)}
+{type:"ForkEvent",count:3(uint64)}
+{type:"PullRequestReviewCommentEvent",count:7(uint64)}
+{type:"PullRequestReviewEvent",count:14(uint64)}
+{type:"WatchEvent",count:29(uint64)}
+ Time (abs ≡): 0.498 s [User: 2.133 s, System: 0.329 s]
```
### Union Test
```
-time super -c "
- FROM 'gha.bsup'
- | SELECT VALUE payload.pull_request
- | WHERE this IS NOT NULL
- | UNNEST [...assignees, assignee]
- | WHERE this IS NOT NULL
- | AGGREGATE count() BY assignee:=login
- | ORDER BY count DESC
- | LIMIT 5
-"
-{assignee:"poad",count:1966(uint64)}
-{assignee:"vinayakkulkarni",count:508(uint64)}
-{assignee:"tmtmtmtm",count:356(uint64)}
-{assignee:"AMatutat",count:260(uint64)}
-{assignee:"danwinship",count:208(uint64)}
-super -c 12.39s user 0.95s system 351% cpu 3.797 total
-
-; time duckdb gha.db -c "
- WITH assignees AS (
- SELECT payload.pull_request.assignee.login assignee
- FROM gha
- UNION ALL
- SELECT unnest(payload.pull_request.assignees).login assignee
- FROM gha
+About to execute
+================
+clickhouse --queries-file /mnt/tmpdir/tmp.rpGStdRtoN
+
+With query
+==========
+WITH assignees AS (
+ SELECT payload.pull_request.assignee.login assignee
+ FROM '/mnt/gha.parquet'
+ UNION ALL
+ SELECT arrayJoin(payload.pull_request.assignees).login assignee
+ FROM '/mnt/gha.parquet'
+)
+SELECT assignee, count(*) count
+FROM assignees
+WHERE assignee IS NOT NULL
+GROUP BY assignee
+ORDER BY count DESC
+LIMIT 5
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'clickhouse --queries-file /mnt/tmpdir/tmp.rpGStdRtoN'
+Benchmark 1: clickhouse --queries-file /mnt/tmpdir/tmp.rpGStdRtoN
+poad 1966
+vinayakkulkarni 508
+tmtmtmtm 356
+AMatutat 260
+danwinship 208
+ Time (abs ≡): 70.276 s [User: 139.539 s, System: 6.504 s]
+
+About to execute
+================
+datafusion-cli --file /mnt/tmpdir/tmp.V2yirMdQ2i
+
+With query
+==========
+WITH assignees AS (
+ SELECT payload.pull_request.assignee.login assignee
+ FROM '/mnt/gha.parquet'
+ UNION ALL
+ SELECT object.login as assignee FROM (
+ SELECT unnest(payload.pull_request.assignees) object
+ FROM '/mnt/gha.parquet'
)
- SELECT assignee, count(*) count
- FROM assignees
- WHERE assignee NOT NULL
- GROUP BY assignee
- ORDER BY count DESC
- LIMIT 5
-"
+)
+SELECT assignee, count() count
+FROM assignees
+WHERE assignee IS NOT NULL
+GROUP BY assignee
+ORDER BY count DESC
+LIMIT 5
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'datafusion-cli --file /mnt/tmpdir/tmp.V2yirMdQ2i'
+Benchmark 1: datafusion-cli --file /mnt/tmpdir/tmp.V2yirMdQ2i
+DataFusion CLI v43.0.0
++-----------------+-------+
+| assignee | count |
++-----------------+-------+
+| poad | 1966 |
+| vinayakkulkarni | 508 |
+| tmtmtmtm | 356 |
+| AMatutat | 260 |
+| danwinship | 208 |
++-----------------+-------+
+5 row(s) fetched.
+Elapsed 24.068 seconds.
+
+ Time (abs ≡): 24.336 s [User: 161.911 s, System: 24.355 s]
+
+About to execute
+================
+duckdb /mnt/gha.db < /mnt/tmpdir/tmp.yz1E2h5G10
+
+With query
+==========
+WITH assignees AS (
+ SELECT payload.pull_request.assignee.login assignee
+ FROM 'gha'
+ UNION ALL
+ SELECT unnest(payload.pull_request.assignees).login assignee
+ FROM 'gha'
+)
+SELECT assignee, count(*) count
+FROM assignees
+WHERE assignee IS NOT NULL
+GROUP BY assignee
+ORDER BY count DESC
+LIMIT 5
+
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb /mnt/gha.db < /mnt/tmpdir/tmp.yz1E2h5G10'
+Benchmark 1: duckdb /mnt/gha.db < /mnt/tmpdir/tmp.yz1E2h5G10
┌─────────────────┬───────┐
│ assignee │ count │
│ varchar │ int64 │
@@ -1295,23 +1570,30 @@ super -c 12.39s user 0.95s system 351% cpu 3.797 total
│ AMatutat │ 260 │
│ danwinship │ 208 │
└─────────────────┴───────┘
-duckdb gha.db -c 3119.93s user 90.86s system 719% cpu 7:26.22 total
+ Time (abs ≡): 519.227 s [User: 4075.550 s, System: 14.520 s]
+
+About to execute
+================
+duckdb < /mnt/tmpdir/tmp.30X1TO2UbL
+
+With query
+==========
+WITH assignees AS (
+ SELECT payload.pull_request.assignee.login assignee
+ FROM '/mnt/gha.parquet'
+ UNION ALL
+ SELECT unnest(payload.pull_request.assignees).login assignee
+ FROM '/mnt/gha.parquet'
+)
+SELECT assignee, count(*) count
+FROM assignees
+WHERE assignee IS NOT NULL
+GROUP BY assignee
+ORDER BY count DESC
+LIMIT 5
-time duckdb -c "
- WITH assignees AS (
- SELECT payload.pull_request.assignee.login assignee
- FROM 'gha.parquet'
- UNION ALL
- SELECT unnest(payload.pull_request.assignees).login assignee
- FROM 'gha.parquet'
- )
- SELECT assignee, count(*) count
- FROM assignees
- WHERE assignee NOT NULL
- GROUP BY assignee
- ORDER BY count DESC
- LIMIT 5
-"
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'duckdb < /mnt/tmpdir/tmp.30X1TO2UbL'
+Benchmark 1: duckdb < /mnt/tmpdir/tmp.30X1TO2UbL
┌─────────────────┬───────┐
│ assignee │ count │
│ varchar │ int64 │
@@ -1322,59 +1604,27 @@ time duckdb -c "
│ AMatutat │ 260 │
│ danwinship │ 208 │
└─────────────────┴───────┘
-duckdb -c 2914.72s user 107.15s system 721% cpu 6:58.68 total
-
-time datafusion-cli -c "
- WITH assignees AS (
- SELECT payload.pull_request.assignee.login assignee
- FROM 'gha.parquet'
- UNION ALL
- SELECT object.login as assignee FROM (
- SELECT unnest(payload.pull_request.assignees) object
- FROM 'gha.parquet'
- )
- )
- SELECT assignee, count() count
- FROM assignees
- WHERE assignee IS NOT NULL
- GROUP BY assignee
- ORDER BY count DESC
- LIMIT 5
-"
-DataFusion CLI v43.0.0
-+-----------------+-------+
-| assignee | count |
-+-----------------+-------+
-| poad | 1966 |
-| vinayakkulkarni | 508 |
-| tmtmtmtm | 356 |
-| AMatutat | 260 |
-| danwinship | 208 |
-+-----------------+-------+
-5 row(s) fetched.
-Elapsed 39.012 seconds.
-
-datafusion-cli -c 116.97s user 44.50s system 408% cpu 39.533 total
+ Time (abs ≡): 499.909 s [User: 3718.128 s, System: 9.680 s]
+
+About to execute
+================
+super -z -I /mnt/tmpdir/tmp.3qO9ALablA
+
+With query
+==========
+FROM '/mnt/gha.bsup'
+| UNNEST [...payload.pull_request.assignees, payload.pull_request.assignee]
+| WHERE this IS NOT NULL
+| AGGREGATE count() BY assignee:=login
+| ORDER BY count DESC
+| LIMIT 5
-; time clickhouse -q "
- WITH assignees AS (
- SELECT payload.pull_request.assignee.login assignee
- FROM 'gha.parquet'
- UNION ALL
- SELECT arrayJoin(payload.pull_request.assignees).login assignee
- FROM 'gha.parquet'
- )
- SELECT assignee, count(*) count
- FROM assignees
- WHERE assignee IS NOT NULL
- GROUP BY assignee
- ORDER BY count DESC
- LIMIT 5
-"
-poad 1966
-vinayakkulkarni 508
-tmtmtmtm 356
-AMatutat 260
-danwinship 208
-clickhouse -q 105.49s user 6.54s system 169% cpu 1:06.27 total
++ hyperfine --show-output --warmup 1 --runs 1 --time-unit second 'super -z -I /mnt/tmpdir/tmp.3qO9ALablA'
+Benchmark 1: super -z -I /mnt/tmpdir/tmp.3qO9ALablA
+{assignee:"poad",count:1966(uint64)}
+{assignee:"vinayakkulkarni",count:508(uint64)}
+{assignee:"tmtmtmtm",count:356(uint64)}
+{assignee:"AMatutat",count:260(uint64)}
+{assignee:"danwinship",count:208(uint64)}
+ Time (abs ≡): 8.180 s [User: 17.197 s, System: 1.909 s]
```
diff --git a/scripts/super-cmd-perf/README.md b/scripts/super-cmd-perf/README.md
new file mode 100644
index 0000000000..4465c71574
--- /dev/null
+++ b/scripts/super-cmd-perf/README.md
@@ -0,0 +1,106 @@
+# Query Performance From `super` Command Doc
+
+These scripts were used to generate the results in the
+[Performance](https://zed.brimdata.io/docs/next/commands/super#performance)
+section of the [`super` command doc](https://zed.brimdata.io/docs/next/commands/super).
+The scripts have been made available to allow for easy reproduction of the
+results under different conditions and/or as tested systems evolve.
+
+# Environments
+
+The scripts were written to be easily run in two different environments.
+
+## AWS
+
+As an environment that's available to everyone, the scripts were developed
+primarily for use on a "scratch" EC2 instance in [AWS](https://aws.amazon.com/).
+Specifically, we chose the [`m6idn.2xlarge`](https://aws.amazon.com/ec2/instance-types/m6i/)
+instance that has the following specifications:
+
+* 8x vCPU
+* 32 GB of RAM
+* 474 GB NVMe instance SSD
+
+The instance SSD in particular was seen as important to ensure consistent I/O
+performance.
+
+Assuming a freshly-created `m6idn.2xlarge` instance running Ubuntu 24.04, to
+start the run:
+
+```
+curl -s https://github.com/brimdata/super/blob/main/scripts/super-cmd-perf/benchmark.sh | bash -xv 2>&1 | tee runlog.txt
+```
+
+The run proceeds in three phases:
+
+1. **(AWS only)** Instance SSD is formatted and required tools & data platforms tools are downloaded/installed
+2. Test data is downloaded and loaded into needed storage formats
+3. Queries are executed on all data platforms
+
+As the benchmarks may take a long time to run, the use of [`screen`](https://www.gnu.org/software/screen/)
+or a similar "detachable" terminal tool is recommended in case your remote
+network connection drops during a run.
+
+## macOS/other
+
+Whereas on [AWS](#aws) the scripts assume they're in a "scratch" environment
+where it may format the instance SSD for optimal storage and install required
+software, on other systems such as macOS it's assumed the required data
+platforms are already installed, and it will skip ahead right to
+downloading/loading test data and then running queries.
+
+For instance on macOS, the software needed can be first installed via:
+
+```
+brew install hyperfine datafusion duckdb clickhouse go
+go install github.com/brimdata/super/cmd/super@main
+```
+
+Then clone the [super repo](https://github.com/brimdata/super.git) and run the
+benchmarks.
+
+```
+git clone https://github.com/brimdata/super.git
+cd scripts/super-cmd-perf
+./benchmark.sh
+```
+
+All test data will remain in this directory.
+
+# Results
+
+Results from the run will accumulate in a subdirectory named for the date/time
+when the run started, e.g., `2024-11-19_01:10:30/`. In this directory, summary
+reports will be created in files ending in `.md` and `.csv` extensions, and
+details from each individual step in generating the results will be in files
+ending in `.out`. If run on AWS using the [`curl` command line shown above](#aws),
+the `runlog.txt` will also be present that holds the full console output of the
+entire run.
+
+An archive of results from our most recent run of the benchmarks on November
+26, 2024 can be downloaded [here](https://super-cmd-perf.s3.us-east-2.amazonaws.com/2024-11-26_03-17-25.tgz).
+
+# Debugging
+
+The scripts are configured to exit immediately if failures occur during the
+run. If you encounter a failure, look in the results directory for the `.out`
+file mentioned last in the console output as this will contain any detailed
+error message from the operation that experienced the failure.
+
+A problem that was encountered when developing the scripts that you may also
+encounter is DuckDB running out of memory. Specifically, this happened when
+we tried to run the scripts on an Intel-based Macbook with only 16 GB of
+RAM, and this is part of why we used an AWS instance with 32 GB of RAM as the
+reference platform. On the Macbooks, we found we could work around the memory
+problem by telling DuckDB it had the use of more memory than its default
+[80% heuristic for `memory_limit`](https://duckdb.org/docs/configuration/overview.html).
+The scripts support an environment variable to make it easy to increase this
+value, e.g., we found the scripts ran successfully at 16 GB:
+
+```
+$ DUCKDB_MEMORY_LIMIT="16GB" ./benchmark.sh
+```
+
+Of course, this ultimately caused swapping on our Macbook and a significant
+hit to performance, but it at least allowed the scripts to run without
+failure.
diff --git a/scripts/super-cmd-perf/benchmark.sh b/scripts/super-cmd-perf/benchmark.sh
new file mode 100755
index 0000000000..35c9449388
--- /dev/null
+++ b/scripts/super-cmd-perf/benchmark.sh
@@ -0,0 +1,97 @@
+#!/bin/bash -xv
+set -euo pipefail
+export RUNNING_ON_AWS_EC2=""
+
+# If we can detect we're running on an AWS EC2 m6idn.2xlarge instance, we'll
+# treat it as a scratch host, installing all needed software and using the
+# local SSD for best I/O performance.
+if command -v dmidecode && [ "$(sudo dmidecode --string system-uuid | cut -c1-3)" == "ec2" ] && [ "$(TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-type)" == "m6idn.2xlarge" ]; then
+
+ export RUNNING_ON_AWS_EC2=true
+
+ sudo apt-get -y update
+ sudo apt-get -y upgrade
+ sudo apt-get -y install make gcc unzip hyperfine
+
+ # Prepare local SSD for best I/O performance
+ sudo fdisk -l /dev/nvme1n1
+ sudo mkfs.ext4 -E discard -F /dev/nvme1n1
+ sudo mount /dev/nvme1n1 /mnt
+ sudo chown ubuntu:ubuntu /mnt
+ sudo chmod 777 /mnt
+ echo 'export TMPDIR="/mnt/tmpdir"' >> "$HOME"/.profile
+ mkdir /mnt/tmpdir
+
+ # Install ClickHouse
+ if ! command -v clickhouse-client > /dev/null 2>&1; then
+ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
+ curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg
+ echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee \
+ /etc/apt/sources.list.d/clickhouse.list
+ sudo apt-get update
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y clickhouse-client
+ fi
+
+ # Install DuckDB
+ if ! command -v duckdb > /dev/null 2>&1; then
+ curl -L -O https://github.com/duckdb/duckdb/releases/download/v1.1.3/duckdb_cli-linux-amd64.zip
+ unzip duckdb_cli-linux-amd64.zip
+ sudo mv duckdb /usr/local/bin
+ fi
+
+ # Install Rust
+ curl -L -O https://static.rust-lang.org/dist/rust-1.82.0-x86_64-unknown-linux-gnu.tar.xz
+ tar xf rust-1.82.0-x86_64-unknown-linux-gnu.tar.xz
+ sudo rust-1.82.0-x86_64-unknown-linux-gnu/install.sh
+ # shellcheck disable=SC2016
+ echo 'export PATH="$PATH:$HOME/.cargo/bin"' >> "$HOME"/.profile
+
+ # Install DataFusion CLI
+ if ! command -v datafusion-cli > /dev/null 2>&1; then
+ cargo install datafusion-cli
+ fi
+
+ # Install Go
+ if ! command -v go > /dev/null 2>&1; then
+ curl -L -O https://go.dev/dl/go1.23.3.linux-amd64.tar.gz
+ rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.3.linux-amd64.tar.gz
+ # shellcheck disable=SC2016
+ echo 'export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"' >> "$HOME"/.profile
+ source "$HOME"/.profile
+ fi
+
+ # Install SuperDB
+ if ! command -v super > /dev/null 2>&1; then
+ git clone https://github.com/brimdata/super.git
+ cd super
+ make install
+ fi
+
+ cd scripts/super-cmd-perf
+
+fi
+
+rundir="$(date +%F_%T)"
+mkdir "$rundir"
+report="$rundir/report_$rundir.md"
+
+echo -e "|**Software**|**Version**|\n|-|-|" | tee -a "$report"
+for software in super duckdb datafusion-cli clickhouse
+do
+ if ! command -v $software > /dev/null; then
+ echo "error: \"$software\" not found in PATH"
+ exit 1
+ fi
+ echo "|$software|$($software --version)|" | tee -a "$report"
+done
+echo >> "$report"
+
+# Prepare the test data
+./prep-data.sh "$rundir"
+
+# Run the queries and generate the summary report
+./run-queries.sh "$rundir"
+
+if [ -n "$RUNNING_ON_AWS_EC2" ]; then
+ mv "$HOME/runlog.txt" "$rundir"
+fi
diff --git a/scripts/super-cmd-perf/prep-data.sh b/scripts/super-cmd-perf/prep-data.sh
new file mode 100755
index 0000000000..a1035092bf
--- /dev/null
+++ b/scripts/super-cmd-perf/prep-data.sh
@@ -0,0 +1,58 @@
+#!/bin/bash -xv
+set -euo pipefail
+pushd "$(cd "$(dirname "$0")" && pwd)"
+
+if [ "$#" -ne 1 ]; then
+ echo "Specify results directory string"
+ exit 1
+fi
+rundir="$(pwd)/$1"
+mkdir -p "$rundir"
+
+RUNNING_ON_AWS_EC2="${RUNNING_ON_AWS_EC2:-}"
+if [ -n "$RUNNING_ON_AWS_EC2" ]; then
+ cd /mnt
+fi
+
+function run_cmd {
+ outputfile="$1"
+ shift
+ { hyperfine \
+ --show-output \
+ --warmup 0 \
+ --runs 1 \
+ --time-unit second \
+ "$@" ;
+ } \
+ > "$outputfile" \
+ 2>&1
+}
+
+mkdir gharchive_gz
+cd gharchive_gz
+for num in $(seq 0 23)
+do
+ curl -L -O "https://data.gharchive.org/2023-02-08-${num}.json.gz"
+done
+cd ..
+
+DUCKDB_MEMORY_LIMIT="${DUCKDB_MEMORY_LIMIT:-}"
+if [ -n "$DUCKDB_MEMORY_LIMIT" ]; then
+ increase_duckdb_memory_limit='SET memory_limit = '\'"${DUCKDB_MEMORY_LIMIT}"\''; '
+else
+ increase_duckdb_memory_limit=""
+fi
+
+run_cmd \
+ "$rundir/duckdb-table-create.out" \
+ "duckdb gha.db -c \"${increase_duckdb_memory_limit}CREATE TABLE gha AS FROM read_json('gharchive_gz/*.json.gz', union_by_name=true)\""
+
+run_cmd \
+ "$rundir/duckdb-parquet-create.out" \
+ "duckdb gha.db -c \"${increase_duckdb_memory_limit}COPY (from gha) TO 'gha.parquet'\""
+
+run_cmd \
+ "$rundir/super-bsup-create.out" \
+ "super -o gha.bsup gharchive_gz/*.json.gz"
+
+du -h gha.db gha.parquet gha.bsup gharchive_gz
diff --git a/scripts/super-cmd-perf/queries/agg.sql b/scripts/super-cmd-perf/queries/agg.sql
new file mode 100644
index 0000000000..074916587c
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/agg.sql
@@ -0,0 +1,4 @@
+SELECT count(),type
+FROM '__SOURCE__'
+WHERE repo.name='duckdb/duckdb'
+GROUP BY type
diff --git a/scripts/super-cmd-perf/queries/count.sql b/scripts/super-cmd-perf/queries/count.sql
new file mode 100644
index 0000000000..289bbbd13c
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/count.sql
@@ -0,0 +1,3 @@
+SELECT count()
+FROM '__SOURCE__'
+WHERE actor.login='johnbieren'
diff --git a/scripts/super-cmd-perf/queries/search+.spq b/scripts/super-cmd-perf/queries/search+.spq
new file mode 100644
index 0000000000..5d081071f0
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/search+.spq
@@ -0,0 +1,3 @@
+SELECT count()
+FROM '__SOURCE__'
+WHERE grep('in case you have any feedback 😊')
diff --git a/scripts/super-cmd-perf/queries/search+.sql b/scripts/super-cmd-perf/queries/search+.sql
new file mode 100644
index 0000000000..7ca7ee7efd
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/search+.sql
@@ -0,0 +1,489 @@
+SELECT count()
+FROM '__SOURCE__'
+WHERE
+ id LIKE '%in case you have any feedback 😊%'
+ OR type LIKE '%in case you have any feedback 😊%'
+ OR actor.login LIKE '%in case you have any feedback 😊%'
+ OR actor.display_login LIKE '%in case you have any feedback 😊%'
+ OR actor.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR actor.url LIKE '%in case you have any feedback 😊%'
+ OR actor.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR repo.name LIKE '%in case you have any feedback 😊%'
+ OR repo.url LIKE '%in case you have any feedback 😊%'
+ OR payload.ref LIKE '%in case you have any feedback 😊%'
+ OR payload.ref_type LIKE '%in case you have any feedback 😊%'
+ OR payload.pusher_type LIKE '%in case you have any feedback 😊%'
+ OR payload.head LIKE '%in case you have any feedback 😊%'
+ OR payload.before LIKE '%in case you have any feedback 😊%'
+ OR payload.master_branch LIKE '%in case you have any feedback 😊%'
+ OR payload.description LIKE '%in case you have any feedback 😊%'
+ OR payload.action LIKE '%in case you have any feedback 😊%'
+ OR org.login LIKE '%in case you have any feedback 😊%'
+ OR org.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR org.url LIKE '%in case you have any feedback 😊%'
+ OR org.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.login LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.user.type LIKE '%in case you have any feedback 😊%'
+ OR payload.review.body LIKE '%in case you have any feedback 😊%'
+ OR payload.review.commit_id LIKE '%in case you have any feedback 😊%'
+ OR payload.review.state LIKE '%in case you have any feedback 😊%'
+ OR payload.review.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.pull_request_url LIKE '%in case you have any feedback 😊%'
+ OR payload.review.author_association LIKE '%in case you have any feedback 😊%'
+ OR payload.review._links.html.href LIKE '%in case you have any feedback 😊%'
+ OR payload.review._links.pull_request.href LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.login LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.user.type LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.path LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.commit_id LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.author_association LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.body LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.reactions.url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.issue_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.diff_hunk LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.original_commit_id LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.pull_request_url LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.start_side LIKE '%in case you have any feedback 😊%'
+ OR payload.comment.side LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.repository_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.labels_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.comments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.title LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.login LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.user.type LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.state LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.login LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.assignee.type LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.labels_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.title LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.description LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.login LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.creator.type LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.milestone.state LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.author_association LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.active_lock_reason LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.body LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.reactions.url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.timeline_url LIKE '%in case you have any feedback 😊%'
+ OR payload.issue.state_reason LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.diff_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.patch_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.issue_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.state LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.title LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.login LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.user.type LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.body LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merge_commit_sha LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.commits_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.review_comments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.review_comment_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.comments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.statuses_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.label LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.ref LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.sha LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.login LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.user.type LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.name LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.full_name LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.login LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.owner.type LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.description LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.forks_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.keys_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.collaborators_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.teams_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.hooks_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.issue_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.assignees_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.branches_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.tags_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.blobs_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.git_tags_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.git_refs_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.trees_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.statuses_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.languages_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.stargazers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.contributors_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.subscribers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.subscription_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.commits_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.git_commits_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.comments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.issue_comment_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.contents_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.compare_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.merges_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.archive_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.downloads_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.issues_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.pulls_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.milestones_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.notifications_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.labels_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.releases_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.deployments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.git_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.ssh_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.clone_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.svn_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.homepage LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.language LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.mirror_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.visibility LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.head.repo.default_branch LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.label LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.ref LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.sha LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.login LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.user.type LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.name LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.full_name LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.login LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.owner.type LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.description LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.forks_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.keys_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.collaborators_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.teams_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.hooks_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.issue_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.assignees_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.branches_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.tags_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.blobs_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.git_tags_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.git_refs_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.trees_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.statuses_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.languages_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.stargazers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.contributors_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.subscribers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.subscription_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.commits_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.git_commits_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.comments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.issue_comment_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.contents_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.compare_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.merges_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.archive_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.downloads_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.issues_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.pulls_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.milestones_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.notifications_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.labels_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.releases_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.deployments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.git_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.ssh_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.clone_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.svn_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.homepage LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.language LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.mirror_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.visibility LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.base.repo.default_branch LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.self.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.html.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.issue.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.comments.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.review_comments.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.review_comment.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.commits.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request._links.statuses.href LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.author_association LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.active_lock_reason LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.mergeable_state LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.login LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.pull_request.merged_by.type LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.name LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.full_name LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.login LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.owner.type LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.description LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.forks_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.keys_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.collaborators_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.teams_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.hooks_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.issue_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.assignees_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.branches_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.tags_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.blobs_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.git_tags_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.git_refs_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.trees_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.statuses_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.languages_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.stargazers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.contributors_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.subscribers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.subscription_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.commits_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.git_commits_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.comments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.issue_comment_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.contents_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.compare_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.merges_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.archive_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.downloads_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.issues_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.pulls_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.milestones_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.notifications_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.labels_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.releases_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.deployments_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.git_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.ssh_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.clone_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.svn_url LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.homepage LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.visibility LIKE '%in case you have any feedback 😊%'
+ OR payload.forkee.default_branch LIKE '%in case you have any feedback 😊%'
+ OR payload.release.url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.assets_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.upload_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.login LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.author.type LIKE '%in case you have any feedback 😊%'
+ OR payload.release.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.release.tag_name LIKE '%in case you have any feedback 😊%'
+ OR payload.release.target_commitish LIKE '%in case you have any feedback 😊%'
+ OR payload.release.name LIKE '%in case you have any feedback 😊%'
+ OR payload.release.tarball_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.zipball_url LIKE '%in case you have any feedback 😊%'
+ OR payload.release.body LIKE '%in case you have any feedback 😊%'
+ OR payload.release.short_description_html LIKE '%in case you have any feedback 😊%'
+ OR payload.release.discussion_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.login LIKE '%in case you have any feedback 😊%'
+ OR payload.member.node_id LIKE '%in case you have any feedback 😊%'
+ OR payload.member.avatar_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.gravatar_id LIKE '%in case you have any feedback 😊%'
+ OR payload.member.url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.html_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.followers_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.following_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.gists_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.starred_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.subscriptions_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.organizations_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.repos_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.received_events_url LIKE '%in case you have any feedback 😊%'
+ OR payload.member.type LIKE '%in case you have any feedback 😊%'
diff --git a/scripts/super-cmd-perf/queries/search.spq b/scripts/super-cmd-perf/queries/search.spq
new file mode 100644
index 0000000000..b289be1760
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/search.spq
@@ -0,0 +1,3 @@
+SELECT count()
+FROM '__SOURCE__'
+WHERE grep('in case you have any feedback 😊', payload.pull_request.body)
diff --git a/scripts/super-cmd-perf/queries/search.sql b/scripts/super-cmd-perf/queries/search.sql
new file mode 100644
index 0000000000..b4feba2741
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/search.sql
@@ -0,0 +1,3 @@
+SELECT count()
+FROM '__SOURCE__'
+WHERE payload.pull_request.body LIKE '%in case you have any feedback 😊%'
diff --git a/scripts/super-cmd-perf/queries/union-clickhouse.sql b/scripts/super-cmd-perf/queries/union-clickhouse.sql
new file mode 100644
index 0000000000..ecea189b37
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/union-clickhouse.sql
@@ -0,0 +1,13 @@
+WITH assignees AS (
+ SELECT payload.pull_request.assignee.login assignee
+ FROM '__SOURCE__'
+ UNION ALL
+ SELECT arrayJoin(payload.pull_request.assignees).login assignee
+ FROM '__SOURCE__'
+)
+SELECT assignee, count(*) count
+FROM assignees
+WHERE assignee IS NOT NULL
+GROUP BY assignee
+ORDER BY count DESC
+LIMIT 5
diff --git a/scripts/super-cmd-perf/queries/union-datafusion.sql b/scripts/super-cmd-perf/queries/union-datafusion.sql
new file mode 100644
index 0000000000..5346c3d211
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/union-datafusion.sql
@@ -0,0 +1,15 @@
+WITH assignees AS (
+ SELECT payload.pull_request.assignee.login assignee
+ FROM '__SOURCE__'
+ UNION ALL
+ SELECT object.login as assignee FROM (
+ SELECT unnest(payload.pull_request.assignees) object
+ FROM '__SOURCE__'
+ )
+)
+SELECT assignee, count() count
+FROM assignees
+WHERE assignee IS NOT NULL
+GROUP BY assignee
+ORDER BY count DESC
+LIMIT 5
diff --git a/scripts/super-cmd-perf/queries/union.spq b/scripts/super-cmd-perf/queries/union.spq
new file mode 100644
index 0000000000..bb53c5fe9f
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/union.spq
@@ -0,0 +1,6 @@
+FROM '__SOURCE__'
+| UNNEST [...payload.pull_request.assignees, payload.pull_request.assignee]
+| WHERE this IS NOT NULL
+| AGGREGATE count() BY assignee:=login
+| ORDER BY count DESC
+| LIMIT 5
diff --git a/scripts/super-cmd-perf/queries/union.sql b/scripts/super-cmd-perf/queries/union.sql
new file mode 100644
index 0000000000..163e9db4e1
--- /dev/null
+++ b/scripts/super-cmd-perf/queries/union.sql
@@ -0,0 +1,13 @@
+WITH assignees AS (
+ SELECT payload.pull_request.assignee.login assignee
+ FROM '__SOURCE__'
+ UNION ALL
+ SELECT unnest(payload.pull_request.assignees).login assignee
+ FROM '__SOURCE__'
+)
+SELECT assignee, count(*) count
+FROM assignees
+WHERE assignee IS NOT NULL
+GROUP BY assignee
+ORDER BY count DESC
+LIMIT 5
diff --git a/scripts/super-cmd-perf/run-queries.sh b/scripts/super-cmd-perf/run-queries.sh
new file mode 100755
index 0000000000..d715738b6d
--- /dev/null
+++ b/scripts/super-cmd-perf/run-queries.sh
@@ -0,0 +1,146 @@
+#!/bin/bash -xv
+set -euo pipefail
+pushd "$(cd "$(dirname "$0")" && pwd)"
+
+if [ "$#" -ne 1 ]; then
+ echo "Specify results directory string"
+ exit 1
+fi
+rundir="$(pwd)/$1"
+mkdir -p "$rundir"
+
+RUNNING_ON_AWS_EC2="${RUNNING_ON_AWS_EC2:-}"
+if [ -n "$RUNNING_ON_AWS_EC2" ]; then
+ storage="/mnt/"
+else
+ storage=""
+fi
+
+warmups=1
+runs=1
+report="$rundir/report_$(basename "$rundir").md"
+csv_report="$rundir/report_$(basename "$rundir").csv"
+
+function run_query {
+ cmd="$1"
+ shift
+ queryfile="$1"
+ shift
+ source="$1"
+ shift
+ outputfile="$rundir/$cmd-$queryfile-$source.out"
+
+ final_query=$(mktemp)
+
+ DUCKDB_MEMORY_LIMIT="${DUCKDB_MEMORY_LIMIT:-}"
+ if [ "$cmd" == "duckdb" ] && [ -n "$DUCKDB_MEMORY_LIMIT" ]; then
+ echo 'SET memory_limit = '\'"${DUCKDB_MEMORY_LIMIT}"\''; ' >> "$final_query"
+ fi
+
+ if [ "$source" == "gha" ]; then
+ sed -e "s/__SOURCE__/$source/" "queries/$queryfile" >> "$final_query"
+ else
+ sed -e "s/__SOURCE__/${storage//\//\\/}${source}/" "queries/$queryfile" >> "$final_query"
+ fi
+
+ if [ "$cmd" == "super" ]; then
+ if [ "$source" == "gha.parquet" ]; then
+ cmd="SUPER_VAM=1 super"
+ fi
+ cmd="$cmd -z -I $final_query"
+ elif [ "$cmd" == "duckdb" ]; then
+ if [ "$source" == "gha" ]; then
+ cmd="duckdb ${storage}gha.db"
+ fi
+ cmd="$cmd < $final_query"
+ elif [ "$cmd" == "datafusion" ]; then
+ cmd="datafusion-cli --file $final_query"
+ elif [ "$cmd" == "clickhouse" ]; then
+ cmd="clickhouse --queries-file $final_query"
+ fi
+
+ echo -e "About to execute\n================\n$cmd\n\nWith query\n==========" > "$outputfile"
+ cat "$final_query" >> "$outputfile"
+ echo >> "$outputfile"
+
+ { hyperfine \
+ --show-output \
+ --warmup $warmups \
+ --runs $runs \
+ --time-unit second \
+ "$cmd" ;
+ } \
+ >> "$outputfile" \
+ 2>&1
+
+ rm -f "$final_query"
+}
+
+echo "|**Tool**|**Format**|**search**|**search+**|**count**|**agg**|**union**|" >> "$report"
+echo "|-|-|-|-|-|-|-|" >> "$report"
+echo "Tool,Format,search,search+,count,agg,union" > "$csv_report"
+
+for source in gha.bsup gha.parquet
+do
+ echo -n "|\`super\`|\`${source/gha./}\`|" >> "$report"
+ echo -n "super,${source/gha./}" >> "$csv_report"
+ for queryfile in search.spq search+.spq count.sql agg.sql union.spq
+ do
+ if [ "$source" == "gha.parquet" ] && { [ "$queryfile" == "search.spq" ] || [ "$queryfile" == "search+.spq" ] || [ "$queryfile" == "union.spq" ]; }; then
+ echo -n "N/A|" >> "$report"
+ echo -n ",N/A" >> "$csv_report"
+ continue
+ fi
+ run_query super $queryfile "$source"
+ result=$(grep Time < "$rundir/super-$queryfile-$source.out" | awk '{ print $4 }')
+ echo -n "$result" >> "$report"
+ echo -n "|" >> "$report"
+ echo -n ",$result" >> "$csv_report"
+ done
+ echo >> "$report"
+ echo >> "$csv_report"
+done
+
+for source in gha gha.parquet
+do
+ duckdb_source=${source/gha\./}
+ duckdb_source=${duckdb_source/gha/db}
+ echo -n "|\`duckdb\`|\`$duckdb_source\`|" >> "$report"
+ echo -n "duckdb,$duckdb_source" >> "$csv_report"
+ for queryfile in search.sql search+.sql count.sql agg.sql union.sql
+ do
+ run_query duckdb $queryfile "$source"
+ result=$(grep Time < "$rundir/duckdb-$queryfile-$source.out" | awk '{ print $4 }')
+ echo -n "$result" >> "$report"
+ echo -n "|" >> "$report"
+ echo -n ",$result" >> "$csv_report"
+ done
+ echo >> "$report"
+ echo >> "$csv_report"
+done
+
+echo -n "|\`datafusion\`|\`parquet\`|" >> "$report"
+echo -n "datafusion,parquet" >> "$csv_report"
+for queryfile in search.sql search+.sql count.sql agg.sql union-datafusion.sql
+do
+ run_query datafusion $queryfile gha.parquet
+ result=$(grep Time < "$rundir/datafusion-$queryfile-$source.out" | awk '{ print $4 }')
+ echo -n "$result" >> "$report"
+ echo -n "|" >> "$report"
+ echo -n ",$result" >> "$csv_report"
+done
+echo >> "$report"
+echo >> "$csv_report"
+
+echo -n "|\`clickhouse\`|\`parquet\`|" >> "$report"
+echo -n "clickhouse,parquet" >> "$csv_report"
+for queryfile in search.sql search+.sql count.sql agg.sql union-clickhouse.sql
+do
+ run_query clickhouse $queryfile gha.parquet
+ result=$(grep Time < "$rundir/clickhouse-$queryfile-$source.out" | awk '{ print $4 }')
+ echo -n "$result" >> "$report"
+ echo -n "|" >> "$report"
+ echo -n ",$result" >> "$csv_report"
+done
+echo >> "$report"
+echo >> "$csv_report"