diff --git a/.github/workflow_templates/README.md b/.github/workflow_templates/README.md new file mode 100644 index 0000000000..9792b88842 --- /dev/null +++ b/.github/workflow_templates/README.md @@ -0,0 +1,35 @@ +# GitHub Actions Workflow Templates for YAML Anchors + +Unfortunately, GitHub Actions does not yet support YAML anchors: . + +It is supposed to be coming in 2025, but until that feature is available, we have to manually generate any workflow files that use YAML anchors. + +Once it is available, we can move these files to the `.github/workflows` directory and remove the tool-generated notice. + +## Tool generated notice + +Add the following notice to the top of any tool-generated workflow file. Replace the `yq` command with the command that generates the file. + +```yaml +################################################################################################################## +# # +# WARNING: TOOL-GENERATED FILE - DO NOT EDIT MANUALLY! # +# # +# Command: yq 'explode(.)' .github/workflow_templates/spiced_docker.yml > .github/workflows/spiced_docker.yml # +# # +# Keep this notice at the top of the file. # +# # +################################################################################################################## +``` + +## `spiced_docker.yml` + +```bash +yq 'explode(.)' .github/workflow_templates/spiced_docker.yml > .github/workflows/spiced_docker.yml +``` + +## `spiced_docker_nightly.yml` + +```bash +yq 'explode(.)' .github/workflow_templates/spiced_docker_nightly.yml > .github/workflows/spiced_docker_nightly.yml +``` diff --git a/.github/workflow_templates/spiced_docker.yml b/.github/workflow_templates/spiced_docker.yml new file mode 100644 index 0000000000..49078512db --- /dev/null +++ b/.github/workflow_templates/spiced_docker.yml @@ -0,0 +1,430 @@ +name: spiced_docker + +on: + push: + tags: + - v* + workflow_dispatch: + inputs: + publish: + description: Publish the Docker images to the registry + required: false + default: "false" + target: + description: Build docker images for specific target(s) + required: false + type: choice + options: + - "all" + - "amd64" + - "arm64" + - "cuda" + default: "all" + +jobs: + setup: + runs-on: ubuntu-latest + outputs: + rel_version: ${{ steps.set_version.outputs.rel_version }} + steps: + - uses: actions/checkout@v4 + + - name: Set REL_VERSION from version.txt + run: python3 ./.github/scripts/get_release_version.py + + - name: Add REL_VERSION to output + id: set_version + run: | + echo "rel_version=${{ env.REL_VERSION }}" >> $GITHUB_OUTPUT + + build-amd64: + if: ${{ github.event_name == 'push' || inputs.target == 'amd64' || inputs.target == 'all' }} + needs: setup + runs-on: spiceai-runners + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + # Enable docker driver for layer caching + driver-opts: | + image=moby/buildkit:latest + + - name: default + run: | + echo "IMAGE_TAG=default" >> $GITHUB_ENV + echo "CARGO_FEATURES=release" >> $GITHUB_ENV + - &build-amd64-image + name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + + - name: odbc + run: | + echo "IMAGE_TAG=odbc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,odbc" >> $GITHUB_ENV + - *build-amd64-image + - name: models + run: | + echo "IMAGE_TAG=models" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models" >> $GITHUB_ENV + - *build-amd64-image + - name: jemalloc + run: | + echo "IMAGE_TAG=jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-jemalloc" >> $GITHUB_ENV + - *build-amd64-image + - name: mimalloc + run: | + echo "IMAGE_TAG=mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-mimalloc" >> $GITHUB_ENV + - *build-amd64-image + - name: sysalloc + run: | + echo "IMAGE_TAG=sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-system" >> $GITHUB_ENV + - *build-amd64-image + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - *build-amd64-image + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - *build-amd64-image + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - *build-amd64-image + - name: Upload AMD64 artifacts + uses: actions/upload-artifact@v4 + with: + name: images-amd64 + path: /tmp/image-amd64-*.tar + + build-arm64: + if: ${{ github.event_name == 'push' || inputs.target == 'arm64' || inputs.target == 'all' }} + needs: setup + runs-on: hosted-linux-arm-runner-16-cores + env: + IMAGE_TAG: default + CARGO_FEATURES: release + steps: + - uses: actions/checkout@v4 + + - name: Install docker + run: | + sudo apt-get update + sudo apt-get install -y ca-certificates curl gnupg lsb-release + sudo mkdir -m 0755 -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -i | awk '{ print tolower($3) }') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update + sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + - name: Start Docker service + run: | + sudo systemctl start docker + sudo systemctl status docker + + - name: chown /var/run/docker.sock to current user + run: | + sudo chown $USER /var/run/docker.sock + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver-opts: | + image=moby/buildkit:latest + + - &build-arm64-image + name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + + - name: odbc + run: | + echo "IMAGE_TAG=odbc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,odbc" >> $GITHUB_ENV + - *build-arm64-image + - name: models + run: | + echo "IMAGE_TAG=models" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models" >> $GITHUB_ENV + - *build-arm64-image + - name: jemalloc + run: | + echo "IMAGE_TAG=jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-jemalloc" >> $GITHUB_ENV + - *build-arm64-image + - name: mimalloc + run: | + echo "IMAGE_TAG=mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-mimalloc" >> $GITHUB_ENV + - *build-arm64-image + - name: sysalloc + run: | + echo "IMAGE_TAG=sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-system" >> $GITHUB_ENV + - *build-arm64-image + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - *build-arm64-image + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - *build-arm64-image + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - *build-arm64-image + - name: Upload ARM64 artifacts + uses: actions/upload-artifact@v4 + with: + name: images-arm64 + path: /tmp/image-arm64-*.tar + + build-cuda: + if: ${{ github.event_name == 'push' || inputs.target == 'cuda' || inputs.target == 'all' }} + needs: setup + runs-on: "ubuntu-gpu-t4-4-core" + steps: + - uses: actions/checkout@v4 + + - name: Install docker + run: | + sudo apt-get update + sudo apt-get install -y ca-certificates curl gnupg lsb-release + sudo mkdir -m 0755 -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -i | awk '{ print tolower($3) }') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update + sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + - name: Start Docker service + run: | + sudo systemctl start docker + sudo systemctl status docker + + - name: chown /var/run/docker.sock to current user + run: | + sudo chown $USER /var/run/docker.sock + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver-opts: | + image=moby/buildkit:latest + + - name: Build CUDA models image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile-cuda + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:models-cuda-amd64,dest=/tmp/images-amd64-cuda.tar + cache-from: type=gha,scope=build-cuda + cache-to: type=gha,scope=build-cuda,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=release,models,cuda + + - name: Upload CUDA artifacts + uses: actions/upload-artifact@v4 + with: + name: images-amd64-cuda + path: /tmp/images-amd64-cuda.tar + + publish: + needs: [setup, build-amd64, build-arm64] + runs-on: ubuntu-latest + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: /tmp + pattern: images-* + + - name: Verify artifacts + run: | + ls -l /tmp + ls -l /tmp/images-amd64 + ls -l /tmp/images-arm64 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Start local registry + run: | + docker run -d -p 5000:5000 --restart=always --name registry registry:2 + + - name: Login to GitHub Package Registry + if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to DockerHub + if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Import images and create manifests + env: + REL_VERSION: ${{ needs.setup.outputs.rel_version }} + PUBLISH: ${{ startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' }} + run: | + echo "REL_VERSION=${REL_VERSION}" + echo "PUBLISH=${PUBLISH}" + variants=("default" "odbc" "models" "jemalloc" "mimalloc" "sysalloc" "models-jemalloc" "models-mimalloc" "models-sysalloc") + for variant in "${variants[@]}"; do + suffix="" + if [ "$variant" != "default" ]; then + suffix="-${variant}" + fi + + # Load both architecture images + echo "Loading AMD64 image" + docker load -i /tmp/images-amd64/image-amd64-${variant}.tar + + echo "Loading ARM64 image" + docker load -i /tmp/images-arm64/image-arm64-${variant}.tar + + # Push images to local registry + echo "Pushing images to local registry" + docker push localhost:5000/spiceai:${variant}-amd64 + docker push localhost:5000/spiceai:${variant}-arm64 + + if [[ "${PUBLISH}" == "true" ]]; then + # Push to GitHub Container Registry + echo "Pushing to GHCR" + docker buildx imagetools create \ + -t ghcr.io/spiceai/spiceai:${REL_VERSION}${suffix} \ + -t ghcr.io/spiceai/spiceai:latest${suffix} \ + localhost:5000/spiceai:${variant}-amd64 \ + localhost:5000/spiceai:${variant}-arm64 + + # Push to DockerHub + echo "Pushing to DockerHub" + docker buildx imagetools create \ + -t spiceai/spiceai:${REL_VERSION}${suffix} \ + -t spiceai/spiceai:latest${suffix} \ + localhost:5000/spiceai:${variant}-amd64 \ + localhost:5000/spiceai:${variant}-arm64 + + echo "Verifying GHCR image:" + docker buildx imagetools inspect ghcr.io/spiceai/spiceai:${REL_VERSION}${suffix} + + echo "Verifying DockerHub image:" + docker buildx imagetools inspect spiceai/spiceai:${REL_VERSION}${suffix} + else + echo "Skipping push for non-tag build" + echo "Creating local manifest for testing:" + docker buildx imagetools create \ + -t localhost:5000/spiceai:latest${suffix} \ + localhost:5000/spiceai:${variant}-amd64 \ + localhost:5000/spiceai:${variant}-arm64 + + docker buildx imagetools inspect localhost:5000/spiceai:latest${suffix} + fi + done + + publish-cuda: + if: ${{ github.event_name == 'push' || inputs.target == 'cuda' || inputs.target == 'all' }} + needs: [setup, build-cuda] + runs-on: "ubuntu-gpu-t4-4-core" + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: /tmp + pattern: images-amd64-cuda + + - name: Verify artifacts + run: | + ls -l /tmp/images-amd64-cuda + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Start local registry + run: | + docker run -d -p 5000:5000 --restart=always --name registry registry:2 + + - name: Login to GitHub Package Registry + if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to DockerHub + if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Import images and create manifests + env: + REL_VERSION: ${{ needs.setup.outputs.rel_version }} + PUBLISH: ${{ startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' }} + run: | + echo "Handling CUDA models..." + + docker load -i /tmp/images-amd64-cuda/images-amd64-cuda.tar + docker push localhost:5000/spiceai:models-cuda-amd64 + + if [[ "${PUBLISH}" == "true" ]]; then + echo "Pushing CUDA models to GHCR and DockerHub" + docker buildx imagetools create \ + -t spiceai/spiceai:${REL_VERSION}-models-cuda \ + -t spiceai/spiceai:latest-models-cuda \ + -t ghcr.io/spiceai/spiceai:${REL_VERSION}-models-cuda \ + -t ghcr.io/spiceai/spiceai:latest-models-cuda \ + localhost:5000/spiceai:models-cuda-amd64 + + echo "Verifying CUDA GHCR image:" + docker buildx imagetools inspect ghcr.io/spiceai/spiceai:${REL_VERSION}-models-cuda + + echo "Verifying CUDA DockerHub image:" + docker buildx imagetools inspect spiceai/spiceai:${REL_VERSION}-models-cuda + else + echo "Skipping push for non-tag CUDA build" + docker buildx imagetools create \ + -t localhost:5000/spiceai:latest-models-cuda \ + localhost:5000/spiceai:models-cuda-amd64 + + docker buildx imagetools inspect localhost:5000/spiceai:latest-models-cuda + fi diff --git a/.github/workflow_templates/spiced_docker_nightly.yml b/.github/workflow_templates/spiced_docker_nightly.yml new file mode 100644 index 0000000000..081f2b037a --- /dev/null +++ b/.github/workflow_templates/spiced_docker_nightly.yml @@ -0,0 +1,316 @@ +name: spiced_docker_nightly + +on: + schedule: + - cron: "0 9 * * *" # Runs the workflow at 9:00 AM UTC (1AM PT) every day + + workflow_dispatch: + inputs: + publish: + description: Publish the Docker images to the registry + required: false + type: boolean + default: false + +jobs: + check_commits: + runs-on: ubuntu-latest + outputs: + has_new_commits: ${{ steps.check_commits.outputs.has_new_commits }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check new commits since latest nightly build + id: check_commits + run: | + # Get the latest commit hash from the default branch + latest_commit=$(git rev-parse HEAD) + + # Attempt to get the commit hash of the current nightly tag + nightly_commit=$(git rev-list -n 1 nightly 2>/dev/null || echo "") + + # Check if there are new commits since the last nightly tag + if [ "$latest_commit" = "$nightly_commit" ]; then + echo "No new commits since the last nightly build. Exiting..." + echo "has_new_commits=false" >> $GITHUB_OUTPUT + exit 0 + fi + + echo "New commits found. Proceeding with the build." + echo "has_new_commits=true" >> $GITHUB_OUTPUT + shell: bash + + setup: + needs: check_commits + if: needs.check_commits.outputs.has_new_commits == 'true' + + runs-on: ubuntu-latest + outputs: + rel_version: ${{ steps.set_version.outputs.rel_version }} + nightly_label: ${{ steps.set_version.outputs.nightly_label }} + steps: + - uses: actions/checkout@v4 + + - name: Set Nightly REL_VERSION from current timestamp + run: python3 ./.github/scripts/get_release_version.py + + - name: Add REL_VERSION to output + id: set_version + run: | + commit_hash=$(git rev-parse --short HEAD) + date="$(date +%Y%m%d)" + version="${date}-${commit_hash}" + nightly_label="nightly.${date}.${commit_hash}" + echo "rel_version=${version}" >> $GITHUB_OUTPUT + echo "nightly_label=${nightly_label}" >> $GITHUB_OUTPUT + echo "Preparing to publish nightly build with version: \"${version}\"" + + build-arm64: + needs: [check_commits, setup] + if: needs.check_commits.outputs.has_new_commits == 'true' + + runs-on: hosted-linux-arm-runner + + steps: + - uses: actions/checkout@v4 + + - name: Add nightly postfix to version in Cargo.toml + env: + NIGHTLY_LABEL: ${{ needs.setup.outputs.nightly_label }} + run: | + current_version=$(grep '^version =' Cargo.toml | sed -E 's/version = "(.*)"/\1/') + if [[ "$current_version" =~ -[a-zA-Z0-9]+(\.[0-9]+)*$ ]]; then + new_version="${current_version}.$NIGHTLY_LABEL" + else + new_version="${current_version}-$NIGHTLY_LABEL" + fi + sed -i "s/^version = \".*\"/version = \"${new_version}\"/" Cargo.toml + grep '^version =' Cargo.toml + + - name: Install docker + run: | + sudo apt-get update + sudo apt-get install -y ca-certificates curl gnupg lsb-release + sudo mkdir -m 0755 -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -i | awk '{ print tolower($3) }') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update + sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + - name: Start Docker service + run: | + sudo systemctl start docker + sudo systemctl status docker + + - name: chown /var/run/docker.sock to current user + run: | + sudo chown $USER /var/run/docker.sock + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver-opts: | + image=moby/buildkit:latest + + - name: default + run: | + echo "IMAGE_TAG=default" >> $GITHUB_ENV + echo "CARGO_FEATURES=release" >> $GITHUB_ENV + - &build-arm64-image + name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - *build-arm64-image + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - *build-arm64-image + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - *build-arm64-image + + - name: Upload ARM64 artifacts + uses: actions/upload-artifact@v4 + with: + name: images-arm64 + path: /tmp/image-arm64-*.tar + + build-amd64: + needs: [check_commits, setup] + if: needs.check_commits.outputs.has_new_commits == 'true' + + runs-on: spiceai-runners + steps: + - uses: actions/checkout@v4 + + - name: Add nightly postfix to version in Cargo.toml + env: + NIGHTLY_LABEL: ${{ needs.setup.outputs.nightly_label }} + run: | + current_version=$(grep '^version =' Cargo.toml | sed -E 's/version = "(.*)"/\1/') + if [[ "$current_version" =~ -[a-zA-Z0-9]+(\.[0-9]+)*$ ]]; then + new_version="${current_version}.$NIGHTLY_LABEL" + else + new_version="${current_version}-$NIGHTLY_LABEL" + fi + sed -i "s/^version = \".*\"/version = \"${new_version}\"/" Cargo.toml + grep '^version =' Cargo.toml + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + # Enable docker driver for layer caching + driver-opts: | + image=moby/buildkit:latest + + - name: default + run: | + echo "IMAGE_TAG=models" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models" >> $GITHUB_ENV + - &build-amd64-image + name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - *build-amd64-image + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - *build-amd64-image + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - *build-amd64-image + + - name: Upload AMD64 artifacts + uses: actions/upload-artifact@v4 + with: + name: images-amd64 + path: /tmp/image-amd64-*.tar + + publish: + needs: [check_commits, setup, build-amd64, build-arm64] + if: needs.check_commits.outputs.has_new_commits == 'true' && (github.event_name == 'schedule' || inputs.publish) + + runs-on: ubuntu-latest + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: /tmp + pattern: images-* + + - name: Verify artifacts + run: | + ls -l /tmp + ls -l /tmp/images-amd64 + ls -l /tmp/images-arm64 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Start local registry + run: | + docker run -d -p 5000:5000 --restart=always --name registry registry:2 + + - name: Login to GitHub Package Registry + if: github.event_name == 'schedule' || inputs.publish + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Import images and create manifests + env: + REL_VERSION: ${{ needs.setup.outputs.rel_version }} + PUBLISH: ${{ github.event_name == 'schedule' || inputs.publish }} + run: | + echo "REL_VERSION=${REL_VERSION}" + echo "PUBLISH=${PUBLISH}" + variants=("models" "models-jemalloc" "models-mimalloc" "models-sysalloc") + for variant in "${variants[@]}"; do + suffix="" + if [ "$variant" != "default" ]; then + suffix="-${variant}" + fi + + # Load both architecture images + echo "Loading AMD64 image" + docker load -i /tmp/images-amd64/image-amd64-${variant}.tar + echo "Loading ARM64 image" + docker load -i /tmp/images-arm64/image-arm64-${variant}.tar + + # Push images to local registry + echo "Pushing images to local registry" + docker push localhost:5000/spiceai:${variant}-amd64 + docker push localhost:5000/spiceai:${variant}-arm64 + + if [[ "${PUBLISH}" == "true" ]]; then + # Push to GitHub Container Registry + echo "Pushing to GHCR" + docker buildx imagetools create \ + -t ghcr.io/spiceai/spiceai-nightly:${REL_VERSION}${suffix} \ + -t ghcr.io/spiceai/spiceai-nightly:latest${suffix} \ + localhost:5000/spiceai:${variant}-amd64 \ + localhost:5000/spiceai:${variant}-arm64 + + echo "Verifying GHCR image:" + docker buildx imagetools inspect ghcr.io/spiceai/spiceai-nightly:${REL_VERSION}${suffix} + else + echo "Skipping push for non-tag build" + echo "Creating local manifest for testing:" + docker buildx imagetools create \ + -t localhost:5000/spiceai:latest${suffix} \ + localhost:5000/spiceai:${variant}-amd64 \ + localhost:5000/spiceai:${variant}-arm64 + + docker buildx imagetools inspect localhost:5000/spiceai:latest${suffix} + fi + done + + - uses: actions/checkout@v4 + if: github.event_name == 'schedule' || inputs.publish + with: + fetch-depth: 0 + + - name: Update nightly tag + if: github.event_name == 'schedule' || inputs.publish + run: | + git tag -f nightly + git push origin nightly --force + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/spiced_docker.yml b/.github/workflows/spiced_docker.yml index edf4f9b6c1..53a75b767b 100644 --- a/.github/workflows/spiced_docker.yml +++ b/.github/workflows/spiced_docker.yml @@ -1,5 +1,13 @@ +################################################################################################################## +# # +# WARNING: TOOL-GENERATED FILE - DO NOT EDIT MANUALLY! # +# # +# Command: yq 'explode(.)' .github/workflow_templates/spiced_docker.yml > .github/workflows/spiced_docker.yml # +# # +# Keep this notice at the top of the file. # +# # +################################################################################################################## name: spiced_docker - on: push: tags: @@ -20,7 +28,6 @@ on: - "arm64" - "cuda" default: "all" - jobs: setup: runs-on: ubuntu-latest @@ -28,81 +35,181 @@ jobs: rel_version: ${{ steps.set_version.outputs.rel_version }} steps: - uses: actions/checkout@v4 - - name: Set REL_VERSION from version.txt run: python3 ./.github/scripts/get_release_version.py - - name: Add REL_VERSION to output id: set_version run: | echo "rel_version=${{ env.REL_VERSION }}" >> $GITHUB_OUTPUT - build-amd64: if: ${{ github.event_name == 'push' || inputs.target == 'amd64' || inputs.target == 'all' }} needs: setup runs-on: spiceai-runners + env: + IMAGE_TAG: default + CARGO_FEATURES: release steps: - uses: actions/checkout@v4 - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: # Enable docker driver for layer caching driver-opts: | image=moby/buildkit:latest - - - name: Build AMD64 default image + - name: Build AMD64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/amd64 - outputs: type=docker,name=localhost:5000/spiceai:default-amd64,dest=/tmp/image-amd64-default.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-amd64 cache-to: type=gha,scope=build-amd64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release - - - name: Build AMD64 odbc image + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: odbc + run: | + echo "IMAGE_TAG=odbc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,odbc" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/amd64 - outputs: type=docker,name=localhost:5000/spiceai:odbc-amd64,dest=/tmp/image-amd64-odbc.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-amd64 cache-to: type=gha,scope=build-amd64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release,odbc - - - name: Build AMD64 models image + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models + run: | + echo "IMAGE_TAG=models" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/amd64 - outputs: type=docker,name=localhost:5000/spiceai:models-amd64,dest=/tmp/image-amd64-models.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-amd64 cache-to: type=gha,scope=build-amd64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release,models - + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: jemalloc + run: | + echo "IMAGE_TAG=jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-jemalloc" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: mimalloc + run: | + echo "IMAGE_TAG=mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-mimalloc" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: sysalloc + run: | + echo "IMAGE_TAG=sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-system" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} - name: Upload AMD64 artifacts uses: actions/upload-artifact@v4 with: name: images-amd64 path: /tmp/image-amd64-*.tar - build-arm64: if: ${{ github.event_name == 'push' || inputs.target == 'arm64' || inputs.target == 'all' }} needs: setup runs-on: hosted-linux-arm-runner-16-cores + env: + IMAGE_TAG: default + CARGO_FEATURES: release steps: - uses: actions/checkout@v4 - - name: Install docker run: | sudo apt-get update @@ -112,74 +219,169 @@ jobs: echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -i | awk '{ print tolower($3) }') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - name: Start Docker service run: | sudo systemctl start docker sudo systemctl status docker - - name: chown /var/run/docker.sock to current user run: | sudo chown $USER /var/run/docker.sock - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: driver-opts: | image=moby/buildkit:latest - - - name: Build ARM64 default image + - name: Build ARM64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/arm64 - outputs: type=docker,name=localhost:5000/spiceai:default-arm64,dest=/tmp/image-arm64-default.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-arm64 cache-to: type=gha,scope=build-arm64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release - - - name: Build ARM64 odbc image + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: odbc + run: | + echo "IMAGE_TAG=odbc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,odbc" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/arm64 - outputs: type=docker,name=localhost:5000/spiceai:odbc-arm64,dest=/tmp/image-arm64-odbc.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-arm64 cache-to: type=gha,scope=build-arm64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release,odbc - - - name: Build ARM64 models image + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models + run: | + echo "IMAGE_TAG=models" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/arm64 - outputs: type=docker,name=localhost:5000/spiceai:models-arm64,dest=/tmp/image-arm64-models.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-arm64 cache-to: type=gha,scope=build-arm64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release,models - + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: jemalloc + run: | + echo "IMAGE_TAG=jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-jemalloc" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: mimalloc + run: | + echo "IMAGE_TAG=mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-mimalloc" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: sysalloc + run: | + echo "IMAGE_TAG=sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,alloc-system" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} - name: Upload ARM64 artifacts uses: actions/upload-artifact@v4 with: name: images-arm64 path: /tmp/image-arm64-*.tar - build-cuda: if: ${{ github.event_name == 'push' || inputs.target == 'cuda' || inputs.target == 'all' }} needs: setup runs-on: "ubuntu-gpu-t4-4-core" steps: - uses: actions/checkout@v4 - - name: Install docker run: | sudo apt-get update @@ -189,22 +391,18 @@ jobs: echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -i | awk '{ print tolower($3) }') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - name: Start Docker service run: | sudo systemctl start docker sudo systemctl status docker - - name: chown /var/run/docker.sock to current user run: | sudo chown $USER /var/run/docker.sock - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: driver-opts: | image=moby/buildkit:latest - - name: Build CUDA models image uses: docker/build-push-action@v6 with: @@ -217,13 +415,11 @@ jobs: build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} CARGO_FEATURES=release,models,cuda - - name: Upload CUDA artifacts uses: actions/upload-artifact@v4 with: name: images-amd64-cuda path: /tmp/images-amd64-cuda.tar - publish: needs: [setup, build-amd64, build-arm64] runs-on: ubuntu-latest @@ -233,20 +429,16 @@ jobs: with: path: /tmp pattern: images-* - - name: Verify artifacts run: | ls -l /tmp ls -l /tmp/images-amd64 ls -l /tmp/images-arm64 - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Start local registry run: | docker run -d -p 5000:5000 --restart=always --name registry registry:2 - - name: Login to GitHub Package Registry if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' uses: docker/login-action@v3 @@ -254,14 +446,12 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Login to DockerHub if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Import images and create manifests env: REL_VERSION: ${{ needs.setup.outputs.rel_version }} @@ -269,7 +459,7 @@ jobs: run: | echo "REL_VERSION=${REL_VERSION}" echo "PUBLISH=${PUBLISH}" - variants=("default" "odbc" "models") + variants=("default" "odbc" "models" "jemalloc" "mimalloc" "sysalloc" "models-jemalloc" "models-mimalloc" "models-sysalloc") for variant in "${variants[@]}"; do suffix="" if [ "$variant" != "default" ]; then @@ -321,7 +511,6 @@ jobs: docker buildx imagetools inspect localhost:5000/spiceai:latest${suffix} fi done - publish-cuda: if: ${{ github.event_name == 'push' || inputs.target == 'cuda' || inputs.target == 'all' }} needs: [setup, build-cuda] @@ -332,18 +521,14 @@ jobs: with: path: /tmp pattern: images-amd64-cuda - - name: Verify artifacts run: | ls -l /tmp/images-amd64-cuda - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Start local registry run: | docker run -d -p 5000:5000 --restart=always --name registry registry:2 - - name: Login to GitHub Package Registry if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' uses: docker/login-action@v3 @@ -351,14 +536,12 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Login to DockerHub if: startsWith(github.ref, 'refs/tags/v') || inputs.publish == 'true' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Import images and create manifests env: REL_VERSION: ${{ needs.setup.outputs.rel_version }} diff --git a/.github/workflows/spiced_docker_nightly.yml b/.github/workflows/spiced_docker_nightly.yml index 1d2d5acb1d..f248ac3988 100644 --- a/.github/workflows/spiced_docker_nightly.yml +++ b/.github/workflows/spiced_docker_nightly.yml @@ -1,9 +1,16 @@ +################################################################################################################################## +# # +# WARNING: TOOL-GENERATED FILE - DO NOT EDIT MANUALLY! # +# # +# Command: yq 'explode(.)' .github/workflow_templates/spiced_docker_nightly.yml > .github/workflows/spiced_docker_nightly.yml # +# # +# Keep this notice at the top of the file. # +# # +################################################################################################################################## name: spiced_docker_nightly - on: schedule: - cron: "0 9 * * *" # Runs the workflow at 9:00 AM UTC (1AM PT) every day - workflow_dispatch: inputs: publish: @@ -11,18 +18,15 @@ on: required: false type: boolean default: false - jobs: check_commits: runs-on: ubuntu-latest outputs: has_new_commits: ${{ steps.check_commits.outputs.has_new_commits }} - steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Check new commits since latest nightly build id: check_commits run: | @@ -42,21 +46,17 @@ jobs: echo "New commits found. Proceeding with the build." echo "has_new_commits=true" >> $GITHUB_OUTPUT shell: bash - setup: needs: check_commits if: needs.check_commits.outputs.has_new_commits == 'true' - runs-on: ubuntu-latest outputs: rel_version: ${{ steps.set_version.outputs.rel_version }} nightly_label: ${{ steps.set_version.outputs.nightly_label }} steps: - uses: actions/checkout@v4 - - name: Set Nightly REL_VERSION from current timestamp run: python3 ./.github/scripts/get_release_version.py - - name: Add REL_VERSION to output id: set_version run: | @@ -67,16 +67,12 @@ jobs: echo "rel_version=${version}" >> $GITHUB_OUTPUT echo "nightly_label=${nightly_label}" >> $GITHUB_OUTPUT echo "Preparing to publish nightly build with version: \"${version}\"" - build-arm64: needs: [check_commits, setup] if: needs.check_commits.outputs.has_new_commits == 'true' - runs-on: hosted-linux-arm-runner - steps: - uses: actions/checkout@v4 - - name: Add nightly postfix to version in Cargo.toml env: NIGHTLY_LABEL: ${{ needs.setup.outputs.nightly_label }} @@ -89,7 +85,6 @@ jobs: fi sed -i "s/^version = \".*\"/version = \"${new_version}\"/" Cargo.toml grep '^version =' Cargo.toml - - name: Install docker run: | sudo apt-get update @@ -99,49 +94,93 @@ jobs: echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -i | awk '{ print tolower($3) }') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - name: Start Docker service run: | sudo systemctl start docker sudo systemctl status docker - - name: chown /var/run/docker.sock to current user run: | sudo chown $USER /var/run/docker.sock - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: driver-opts: | image=moby/buildkit:latest - - - name: Build ARM64 models image + - name: default + run: | + echo "IMAGE_TAG=default" >> $GITHUB_ENV + echo "CARGO_FEATURES=release" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/arm64 - outputs: type=docker,name=localhost:5000/spiceai:models-arm64,dest=/tmp/image-arm64-models.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-arm64 cache-to: type=gha,scope=build-arm64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release,models - + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - name: Build ARM64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-arm64,dest=/tmp/image-arm64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-arm64 + cache-to: type=gha,scope=build-arm64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} - name: Upload ARM64 artifacts uses: actions/upload-artifact@v4 with: name: images-arm64 path: /tmp/image-arm64-*.tar - build-amd64: needs: [check_commits, setup] if: needs.check_commits.outputs.has_new_commits == 'true' - runs-on: spiceai-runners steps: - uses: actions/checkout@v4 - - name: Add nightly postfix to version in Cargo.toml env: NIGHTLY_LABEL: ${{ needs.setup.outputs.nightly_label }} @@ -154,37 +193,84 @@ jobs: fi sed -i "s/^version = \".*\"/version = \"${new_version}\"/" Cargo.toml grep '^version =' Cargo.toml - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: # Enable docker driver for layer caching driver-opts: | image=moby/buildkit:latest - - - name: Build AMD64 models image + - name: default + run: | + echo "IMAGE_TAG=models" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image uses: docker/build-push-action@v6 with: context: . file: Dockerfile platforms: linux/amd64 - outputs: type=docker,name=localhost:5000/spiceai:models-amd64,dest=/tmp/image-amd64-models.tar + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar cache-from: type=gha,scope=build-amd64 cache-to: type=gha,scope=build-amd64,mode=max build-args: | REL_VERSION=${{ needs.setup.outputs.rel_version }} - CARGO_FEATURES=release,models - + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-jemalloc + run: | + echo "IMAGE_TAG=models-jemalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-jemalloc" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-mimalloc + run: | + echo "IMAGE_TAG=models-mimalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-mimalloc" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} + - name: models-sysalloc + run: | + echo "IMAGE_TAG=models-sysalloc" >> $GITHUB_ENV + echo "CARGO_FEATURES=release,models,alloc-system" >> $GITHUB_ENV + - name: Build AMD64 ${{ env.IMAGE_TAG }} image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + outputs: type=docker,name=localhost:5000/spiceai:${{ env.IMAGE_TAG }}-amd64,dest=/tmp/image-amd64-${{ env.IMAGE_TAG }}.tar + cache-from: type=gha,scope=build-amd64 + cache-to: type=gha,scope=build-amd64,mode=max + build-args: | + REL_VERSION=${{ needs.setup.outputs.rel_version }} + CARGO_FEATURES=${{ env.CARGO_FEATURES }} - name: Upload AMD64 artifacts uses: actions/upload-artifact@v4 with: name: images-amd64 path: /tmp/image-amd64-*.tar - publish: needs: [check_commits, setup, build-amd64, build-arm64] if: needs.check_commits.outputs.has_new_commits == 'true' && (github.event_name == 'schedule' || inputs.publish) - runs-on: ubuntu-latest steps: - name: Download all artifacts @@ -192,20 +278,16 @@ jobs: with: path: /tmp pattern: images-* - - name: Verify artifacts run: | ls -l /tmp ls -l /tmp/images-amd64 ls -l /tmp/images-arm64 - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Start local registry run: | docker run -d -p 5000:5000 --restart=always --name registry registry:2 - - name: Login to GitHub Package Registry if: github.event_name == 'schedule' || inputs.publish uses: docker/login-action@v3 @@ -213,7 +295,6 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Import images and create manifests env: REL_VERSION: ${{ needs.setup.outputs.rel_version }} @@ -221,7 +302,7 @@ jobs: run: | echo "REL_VERSION=${REL_VERSION}" echo "PUBLISH=${PUBLISH}" - variants=("models") # we might need to include other variants in future + variants=("models" "models-jemalloc" "models-mimalloc" "models-sysalloc") for variant in "${variants[@]}"; do suffix="" if [ "$variant" != "default" ]; then @@ -261,12 +342,10 @@ jobs: docker buildx imagetools inspect localhost:5000/spiceai:latest${suffix} fi done - - uses: actions/checkout@v4 if: github.event_name == 'schedule' || inputs.publish with: fetch-depth: 0 - - name: Update nightly tag if: github.event_name == 'schedule' || inputs.publish run: | diff --git a/Cargo.lock b/Cargo.lock index e53117f7f9..54cfb9a884 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6894,6 +6894,16 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +[[package]] +name = "libmimalloc-sys" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9d6fac27761dabcd4ee73571cdb06b7022dc99089acbe5435691edffaac0f4" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "libredox" version = "0.1.3" @@ -7533,6 +7543,15 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "mimalloc" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "995942f432bbb4822a7e9c3faa87a695185b0d09273ba85f097b54f4e458f2af" +dependencies = [ + "libmimalloc-sys", +] + [[package]] name = "mime" version = "0.3.17" @@ -11938,6 +11957,7 @@ dependencies = [ "clap", "flightrepl", "futures", + "mimalloc", "opentelemetry 0.27.1", "opentelemetry-http", "opentelemetry-prometheus", @@ -11956,6 +11976,7 @@ dependencies = [ "snmalloc-rs", "spice-cloud", "telemetry", + "tikv-jemallocator", "tokio", "tpc-extension", "tracing", @@ -12778,6 +12799,26 @@ dependencies = [ "rustc-hash 1.1.0", ] +[[package]] +name = "tikv-jemalloc-sys" +version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + [[package]] name = "time" version = "0.3.37" diff --git a/bin/spiced/Cargo.toml b/bin/spiced/Cargo.toml index ab84971ee2..01550233a0 100644 --- a/bin/spiced/Cargo.toml +++ b/bin/spiced/Cargo.toml @@ -28,7 +28,9 @@ rustls-pemfile.workspace = true serde_json.workspace = true serde_yaml.workspace = true snafu.workspace = true -snmalloc-rs = "0.3.6" +snmalloc-rs = { version = "0.3.6" } +mimalloc = { version = "0.1.46", optional = true } +tikv-jemallocator = { version = "0.6.0", optional = true } spice-cloud = { path = "../../crates/spice_cloud" } telemetry = { path = "../../crates/telemetry" } tokio.workspace = true @@ -39,6 +41,10 @@ tracing-subscriber.workspace = true # Non-default features should be added to `lint-rust` make target. [features] +alloc-mimalloc = ["dep:mimalloc"] +alloc-jemalloc = ["dep:tikv-jemallocator"] +alloc-system = [] +alloc-snmalloc = [] anonymous_telemetry = ["telemetry/anonymous_telemetry"] aws-secrets-manager = ["runtime/aws-secrets-manager"] clickhouse = ["runtime/clickhouse"] @@ -64,6 +70,7 @@ default = [ "mssql", "dynamodb", "imap", + "alloc-snmalloc", ] delta_lake = ["runtime/delta_lake"] dev = ["runtime/dev"] diff --git a/bin/spiced/src/main.rs b/bin/spiced/src/main.rs index a8b33653e1..964959aed7 100644 --- a/bin/spiced/src/main.rs +++ b/bin/spiced/src/main.rs @@ -20,9 +20,40 @@ use rustls::crypto::{self, CryptoProvider}; use telemetry::noop::NoopMeterProvider; use tokio::runtime::Runtime; +#[cfg(feature = "alloc-jemalloc")] +#[global_allocator] +static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; + +#[cfg(feature = "alloc-mimalloc")] +#[global_allocator] +static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; + +#[cfg(feature = "alloc-system")] +#[global_allocator] +static ALLOC: std::alloc::System = std::alloc::System; + +// snmalloc is the default allocator if no other allocator is selected +#[cfg(not(any( + feature = "alloc-jemalloc", + feature = "alloc-mimalloc", + feature = "alloc-system" +)))] #[global_allocator] static ALLOC: snmalloc_rs::SnMalloc = snmalloc_rs::SnMalloc; +// Function to determine the allocator name at compile time +const fn get_allocator_name() -> Option<&'static str> { + if cfg!(feature = "alloc-jemalloc") { + Some("jemalloc") + } else if cfg!(feature = "alloc-mimalloc") { + Some("mimalloc") + } else if cfg!(feature = "alloc-system") { + Some("system") + } else { + None + } +} + fn main() { let args = spiced::Args::parse(); @@ -63,7 +94,14 @@ fn main() { async fn start_runtime(args: spiced::Args) -> Result<(), Box> { spiced::in_tracing_context(|| { - tracing::info!("Starting runtime {version}", version = get_version_string()); + if let Some(allocator_name) = get_allocator_name() { + tracing::info!( + "Starting runtime {version} (allocator: {allocator_name})", + version = get_version_string(), + ); + } else { + tracing::info!("Starting runtime {version}", version = get_version_string()); + } }); spiced::run(args).await?; Ok(()) diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q10_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q10_explain.snap new file mode 100644 index 0000000000..bb9f898078 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q10_explain.snap @@ -0,0 +1,70 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q10" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: revenue DESC NULLS FIRST, fetch=20 | +| | Projection: customer.c_custkey, customer.c_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue, customer.c_acctbal, nation.n_name, customer.c_address, customer.c_phone, customer.c_comment | +| | Aggregate: groupBy=[[customer.c_custkey, customer.c_name, customer.c_acctbal, customer.c_phone, nation.n_name, customer.c_address, customer.c_comment]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_phone, customer.c_acctbal, customer.c_comment, lineitem.l_extendedprice, lineitem.l_discount, nation.n_name | +| | Inner Join: customer.c_nationkey = nation.n_nationkey | +| | Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_nationkey, customer.c_phone, customer.c_acctbal, customer.c_comment, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_nationkey, customer.c_phone, customer.c_acctbal, customer.c_comment, orders.o_orderkey | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment] | +| | Projection: orders.o_orderkey, orders.o_custkey | +| | BytesProcessedNode | +| | Filter: orders.o_orderdate >= Date32("1993-10-01") AND orders.o_orderdate < Date32("1994-01-01") | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate], partial_filters=[orders.o_orderdate >= Date32("1993-10-01"), orders.o_orderdate < Date32("1994-01-01")] | +| | Projection: lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount | +| | BytesProcessedNode | +| | Filter: lineitem.l_returnflag = Utf8("R") | +| | TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount, l_returnflag], partial_filters=[lineitem.l_returnflag = Utf8("R")] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name] | +| physical_plan | SortPreservingMergeExec: [revenue@2 DESC], fetch=20 | +| | SortExec: TopK(fetch=20), expr=[revenue@2 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_custkey@0 as c_custkey, c_name@1 as c_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@7 as revenue, c_acctbal@2 as c_acctbal, n_name@4 as n_name, c_address@5 as c_address, c_phone@3 as c_phone, c_comment@6 as c_comment] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_custkey@0 as c_custkey, c_name@1 as c_name, c_acctbal@2 as c_acctbal, c_phone@3 as c_phone, n_name@4 as n_name, c_address@5 as c_address, c_comment@6 as c_comment], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0, c_name@1, c_acctbal@2, c_phone@3, n_name@4, c_address@5, c_comment@6], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_custkey@0 as c_custkey, c_name@1 as c_name, c_acctbal@4 as c_acctbal, c_phone@3 as c_phone, n_name@8 as n_name, c_address@2 as c_address, c_comment@5 as c_comment], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_nationkey@3, n_nationkey@0)], projection=[c_custkey@0, c_name@1, c_address@2, c_phone@4, c_acctbal@5, c_comment@6, l_extendedprice@7, l_discount@8, n_name@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@7, l_orderkey@0)], projection=[c_custkey@0, c_name@1, c_address@2, c_nationkey@3, c_phone@4, c_acctbal@5, c_comment@6, l_extendedprice@9, l_discount@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_custkey@0, c_name@1, c_address@2, c_nationkey@3, c_phone@4, c_acctbal@5, c_comment@6, o_orderkey@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[o_orderkey@0 as o_orderkey, o_custkey@1 as o_custkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: o_orderdate@2 >= 1993-10-01 AND o_orderdate@2 < 1994-01-01 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_custkey, o_orderdate], predicate=o_orderdate@4 >= 1993-10-01 AND o_orderdate@4 < 1994-01-01, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1993-10-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 < 1994-01-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey, l_extendedprice@1 as l_extendedprice, l_discount@2 as l_discount] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_returnflag@3 = R | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_extendedprice, l_discount, l_returnflag], predicate=l_returnflag@8 = R, pruning_predicate=l_returnflag_null_count@2 != l_returnflag_row_count@3 AND l_returnflag_min@0 <= R AND R <= l_returnflag_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=true | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q11_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q11_explain.snap new file mode 100644 index 0000000000..b81a5443a0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q11_explain.snap @@ -0,0 +1,98 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q11" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: value DESC NULLS FIRST | +| | Projection: partsupp.ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty) AS value | +| | Inner Join: Filter: CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty) AS Decimal128(38, 15)) > __scalar_sq_1.sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001) | +| | Aggregate: groupBy=[[partsupp.ps_partkey]], aggr=[[sum(partsupp.ps_supplycost * CAST(partsupp.ps_availqty AS Decimal128(20, 0)))]] | +| | Projection: partsupp.ps_partkey, partsupp.ps_availqty, partsupp.ps_supplycost | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: partsupp.ps_partkey, partsupp.ps_availqty, partsupp.ps_supplycost, supplier.s_nationkey | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | Projection: nation.n_nationkey | +| | BytesProcessedNode | +| | Filter: nation.n_name = Utf8("GERMANY") | +| | TableScan: nation projection=[n_nationkey, n_name], partial_filters=[nation.n_name = Utf8("GERMANY")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty) AS Float64) * Float64(0.0001) AS Decimal128(38, 15)) | +| | Aggregate: groupBy=[[]], aggr=[[sum(partsupp.ps_supplycost * CAST(partsupp.ps_availqty AS Decimal128(20, 0)))]] | +| | Projection: partsupp.ps_availqty, partsupp.ps_supplycost | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: partsupp.ps_availqty, partsupp.ps_supplycost, supplier.s_nationkey | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_suppkey, ps_availqty, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | Projection: nation.n_nationkey | +| | BytesProcessedNode | +| | Filter: nation.n_name = Utf8("GERMANY") | +| | TableScan: nation projection=[n_nationkey, n_name], partial_filters=[nation.n_name = Utf8("GERMANY")] | +| physical_plan | SortExec: expr=[value@1 DESC], preserve_partitioning=[false] | +| | ProjectionExec: expr=[ps_partkey@0 as ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 as value] | +| | NestedLoopJoinExec: join_type=Inner, filter=CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Decimal128(38, 15)) > sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)@1, projection=[ps_partkey@0, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[ps_partkey@0, ps_availqty@1, ps_supplycost@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@1, s_suppkey@0)], projection=[ps_partkey@0, ps_availqty@2, ps_supplycost@3, s_nationkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:0..1705770], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:1705770..3411540], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:3411540..5117310], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:5117310..6823080], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:6823080..8528850], ...]}, projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[n_nationkey@0 as n_nationkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: n_name@1 = GERMANY | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = GERMANY, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Float64) * 0.0001 AS Decimal128(38, 15)) as sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[ps_availqty@0, ps_supplycost@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@0, s_suppkey@0)], projection=[ps_availqty@1, ps_supplycost@2, s_nationkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:0..1705770], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:1705770..3411540], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:3411540..5117310], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:5117310..6823080], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:6823080..8528850], ...]}, projection=[ps_suppkey, ps_availqty, ps_supplycost], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[n_nationkey@0 as n_nationkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: n_name@1 = GERMANY | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = GERMANY, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q12_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q12_explain.snap new file mode 100644 index 0000000000..94400651f8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q12_explain.snap @@ -0,0 +1,40 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q12" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lineitem.l_shipmode ASC NULLS LAST | +| | Projection: lineitem.l_shipmode, sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS high_line_count, sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS low_line_count | +| | Aggregate: groupBy=[[lineitem.l_shipmode]], aggr=[[sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)]] | +| | Projection: lineitem.l_shipmode, orders.o_orderpriority | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | Projection: lineitem.l_orderkey, lineitem.l_shipmode | +| | BytesProcessedNode | +| | Filter: (lineitem.l_shipmode = Utf8("MAIL") OR lineitem.l_shipmode = Utf8("SHIP")) AND lineitem.l_receiptdate > lineitem.l_commitdate AND lineitem.l_shipdate < lineitem.l_commitdate AND lineitem.l_receiptdate >= Date32("1994-01-01") AND lineitem.l_receiptdate < Date32("1995-01-01") | +| | TableScan: lineitem projection=[l_orderkey, l_shipdate, l_commitdate, l_receiptdate, l_shipmode], partial_filters=[lineitem.l_shipmode = Utf8("MAIL") OR lineitem.l_shipmode = Utf8("SHIP"), lineitem.l_receiptdate > lineitem.l_commitdate, lineitem.l_shipdate < lineitem.l_commitdate, lineitem.l_receiptdate >= Date32("1994-01-01"), lineitem.l_receiptdate < Date32("1995-01-01")] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_orderpriority] | +| physical_plan | SortPreservingMergeExec: [l_shipmode@0 ASC NULLS LAST] | +| | SortExec: expr=[l_shipmode@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_shipmode@0 as l_shipmode, sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)@1 as high_line_count, sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)@2 as low_line_count] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_shipmode@0 as l_shipmode], aggr=[sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_shipmode@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_shipmode@0 as l_shipmode], aggr=[sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@0, o_orderkey@0)], projection=[l_shipmode@1, o_orderpriority@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey, l_shipmode@4 as l_shipmode] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: (l_shipmode@4 = MAIL OR l_shipmode@4 = SHIP) AND l_receiptdate@3 > l_commitdate@2 AND l_shipdate@1 < l_commitdate@2 AND l_receiptdate@3 >= 1994-01-01 AND l_receiptdate@3 < 1995-01-01 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_shipdate, l_commitdate, l_receiptdate, l_shipmode], predicate=(l_shipmode@14 = MAIL OR l_shipmode@14 = SHIP) AND l_receiptdate@12 > l_commitdate@11 AND l_shipdate@10 < l_commitdate@11 AND l_receiptdate@12 >= 1994-01-01 AND l_receiptdate@12 < 1995-01-01, pruning_predicate=(l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= MAIL AND MAIL <= l_shipmode_max@1 OR l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= SHIP AND SHIP <= l_shipmode_max@1) AND l_receiptdate_null_count@5 != l_receiptdate_row_count@6 AND l_receiptdate_max@4 >= 1994-01-01 AND l_receiptdate_null_count@5 != l_receiptdate_row_count@6 AND l_receiptdate_min@7 < 1995-01-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_orderpriority], predicate=true | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q13_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q13_explain.snap new file mode 100644 index 0000000000..fbe7eef741 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q13_explain.snap @@ -0,0 +1,45 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q13" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: custdist DESC NULLS FIRST, c_orders.c_count DESC NULLS FIRST | +| | Projection: c_orders.c_count, count(*) AS custdist | +| | Aggregate: groupBy=[[c_orders.c_count]], aggr=[[count(Int64(1)) AS count(*)]] | +| | SubqueryAlias: c_orders | +| | Projection: count(orders.o_orderkey) AS c_count | +| | Aggregate: groupBy=[[customer.c_custkey]], aggr=[[count(orders.o_orderkey)]] | +| | Projection: customer.c_custkey, orders.o_orderkey | +| | Left Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey] | +| | Projection: orders.o_orderkey, orders.o_custkey | +| | BytesProcessedNode | +| | Filter: orders.o_comment NOT LIKE Utf8("%special%requests%") | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_comment], partial_filters=[orders.o_comment NOT LIKE Utf8("%special%requests%")] | +| physical_plan | SortPreservingMergeExec: [custdist@1 DESC, c_count@0 DESC] | +| | SortExec: expr=[custdist@1 DESC, c_count@0 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_count@0 as c_count, count(*)@1 as custdist] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_count@0 as c_count], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_count@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_count@0 as c_count], aggr=[count(*)] | +| | ProjectionExec: expr=[count(orders.o_orderkey)@1 as c_count] | +| | AggregateExec: mode=SinglePartitioned, gby=[c_custkey@0 as c_custkey], aggr=[count(orders.o_orderkey)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(c_custkey@0, o_custkey@1)], projection=[c_custkey@0, o_orderkey@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[o_orderkey@0 as o_orderkey, o_custkey@1 as o_custkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: o_comment@2 NOT LIKE %special%requests% | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_custkey, o_comment], predicate=o_comment@8 NOT LIKE %special%requests% | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q14_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q14_explain.snap new file mode 100644 index 0000000000..a7ded08bb7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q14_explain.snap @@ -0,0 +1,38 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q14" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: Float64(100) * CAST(sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END) AS Float64) / CAST(sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS Float64) AS promo_revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN __common_expr_1 ELSE Decimal128(Some(0),38,4) END) AS sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END), sum(__common_expr_1) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS __common_expr_1, part.p_type | +| | Inner Join: lineitem.l_partkey = part.p_partkey | +| | Projection: lineitem.l_partkey, lineitem.l_extendedprice, lineitem.l_discount | +| | BytesProcessedNode | +| | Filter: lineitem.l_shipdate >= Date32("1995-09-01") AND lineitem.l_shipdate < Date32("1995-10-01") | +| | TableScan: lineitem projection=[l_partkey, l_extendedprice, l_discount, l_shipdate], partial_filters=[lineitem.l_shipdate >= Date32("1995-09-01"), lineitem.l_shipdate < Date32("1995-10-01")] | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey, p_type] | +| physical_plan | ProjectionExec: expr=[100 * CAST(sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END)@0 AS Float64) / CAST(sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 AS Float64) as promo_revenue] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | ProjectionExec: expr=[l_extendedprice@0 * (Some(1),20,0 - l_discount@1) as __common_expr_1, p_type@2 as p_type] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_partkey@0, p_partkey@0)], projection=[l_extendedprice@1, l_discount@2, p_type@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_partkey@0 as l_partkey, l_extendedprice@1 as l_extendedprice, l_discount@2 as l_discount] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_shipdate@3 >= 1995-09-01 AND l_shipdate@3 < 1995-10-01 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_partkey, l_extendedprice, l_discount, l_shipdate], predicate=l_shipdate@10 >= 1995-09-01 AND l_shipdate@10 < 1995-10-01, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1995-09-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 < 1995-10-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_type], predicate=true | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q16_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q16_explain.snap new file mode 100644 index 0000000000..f9266ea63e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q16_explain.snap @@ -0,0 +1,62 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q16" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: supplier_cnt DESC NULLS FIRST, part.p_brand ASC NULLS LAST, part.p_type ASC NULLS LAST, part.p_size ASC NULLS LAST | +| | Projection: part.p_brand, part.p_type, part.p_size, count(alias1) AS supplier_cnt | +| | Aggregate: groupBy=[[part.p_brand, part.p_type, part.p_size]], aggr=[[count(alias1)]] | +| | Aggregate: groupBy=[[part.p_brand, part.p_type, part.p_size, partsupp.ps_suppkey AS alias1]], aggr=[[]] | +| | LeftAnti Join: partsupp.ps_suppkey = __correlated_sq_1.s_suppkey | +| | Projection: partsupp.ps_suppkey, part.p_brand, part.p_type, part.p_size | +| | Inner Join: partsupp.ps_partkey = part.p_partkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey] | +| | BytesProcessedNode | +| | Filter: part.p_brand != Utf8("Brand#45") AND part.p_type NOT LIKE Utf8("MEDIUM POLISHED%") AND part.p_size IN ([Int64(49), Int64(14), Int64(23), Int64(45), Int64(19), Int64(3), Int64(36), Int64(9)]) | +| | TableScan: part projection=[p_partkey, p_brand, p_type, p_size], partial_filters=[part.p_brand != Utf8("Brand#45"), part.p_type NOT LIKE Utf8("MEDIUM POLISHED%"), part.p_size IN ([Int64(49), Int64(14), Int64(23), Int64(45), Int64(19), Int64(3), Int64(36), Int64(9)])] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: supplier.s_suppkey | +| | BytesProcessedNode | +| | Filter: supplier.s_comment LIKE Utf8("%Customer%Complaints%") | +| | TableScan: supplier projection=[s_suppkey, s_comment], partial_filters=[supplier.s_comment LIKE Utf8("%Customer%Complaints%")] | +| physical_plan | SortPreservingMergeExec: [supplier_cnt@3 DESC, p_brand@0 ASC NULLS LAST, p_type@1 ASC NULLS LAST, p_size@2 ASC NULLS LAST] | +| | SortExec: expr=[supplier_cnt@3 DESC, p_brand@0 ASC NULLS LAST, p_type@1 ASC NULLS LAST, p_size@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size, count(alias1)@3 as supplier_cnt] | +| | AggregateExec: mode=FinalPartitioned, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size], aggr=[count(alias1)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_brand@0, p_type@1, p_size@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size], aggr=[count(alias1)] | +| | AggregateExec: mode=FinalPartitioned, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size, alias1@3 as alias1], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_brand@0, p_type@1, p_size@2, alias1@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[p_brand@1 as p_brand, p_type@2 as p_type, p_size@3 as p_size, ps_suppkey@0 as alias1], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(ps_suppkey@0, s_suppkey@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_partkey@0, p_partkey@0)], projection=[ps_suppkey@1, p_brand@3, p_type@4, p_size@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:0..1705770], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:1705770..3411540], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:3411540..5117310], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:5117310..6823080], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:6823080..8528850], ...]}, projection=[ps_partkey, ps_suppkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: p_brand@1 != Brand#45 AND p_type@2 NOT LIKE MEDIUM POLISHED% AND Use p_size@3 IN (SET) ([Literal { value: Int64(49) }, Literal { value: Int64(14) }, Literal { value: Int64(23) }, Literal { value: Int64(45) }, Literal { value: Int64(19) }, Literal { value: Int64(3) }, Literal { value: Int64(36) }, Literal { value: Int64(9) }]) | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_brand, p_type, p_size], predicate=p_brand@3 != Brand#45 AND p_type@4 NOT LIKE MEDIUM POLISHED% AND Use p_size@5 IN (SET) ([Literal { value: Int64(49) }, Literal { value: Int64(14) }, Literal { value: Int64(23) }, Literal { value: Int64(45) }, Literal { value: Int64(19) }, Literal { value: Int64(3) }, Literal { value: Int64(36) }, Literal { value: Int64(9) }]), pruning_predicate=p_brand_null_count@2 != p_brand_row_count@3 AND (p_brand_min@0 != Brand#45 OR Brand#45 != p_brand_max@1) AND (p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 49 AND 49 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 14 AND 14 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 23 AND 23 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 45 AND 45 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 19 AND 19 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 3 AND 3 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 36 AND 36 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 9 AND 9 <= p_size_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[s_suppkey@0 as s_suppkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: s_comment@1 LIKE %Customer%Complaints% | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_comment], predicate=s_comment@6 LIKE %Customer%Complaints% | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q17_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q17_explain.snap new file mode 100644 index 0000000000..c9bfd05cc5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q17_explain.snap @@ -0,0 +1,53 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q17" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: CAST(sum(lineitem.l_extendedprice) AS Float64) / Float64(7) AS avg_yearly | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice)]] | +| | Projection: lineitem.l_extendedprice | +| | Inner Join: part.p_partkey = __scalar_sq_1.l_partkey Filter: CAST(lineitem.l_quantity AS Decimal128(30, 15)) < __scalar_sq_1.Float64(0.2) * avg(lineitem.l_quantity) | +| | Projection: lineitem.l_quantity, lineitem.l_extendedprice, part.p_partkey | +| | Inner Join: lineitem.l_partkey = part.p_partkey | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice] | +| | Projection: part.p_partkey | +| | BytesProcessedNode | +| | Filter: part.p_brand = Utf8("Brand#23") AND part.p_container = Utf8("MED BOX") | +| | TableScan: part projection=[p_partkey, p_brand, p_container], partial_filters=[part.p_brand = Utf8("Brand#23"), part.p_container = Utf8("MED BOX")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(Float64(0.2) * CAST(avg(lineitem.l_quantity) AS Float64) AS Decimal128(30, 15)), lineitem.l_partkey | +| | Aggregate: groupBy=[[lineitem.l_partkey]], aggr=[[avg(lineitem.l_quantity)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_quantity] | +| physical_plan | ProjectionExec: expr=[CAST(sum(lineitem.l_extendedprice)@0 AS Float64) / 7 as avg_yearly] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(lineitem.l_extendedprice)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(lineitem.l_extendedprice)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@2, l_partkey@1)], filter=CAST(l_quantity@0 AS Decimal128(30, 15)) < Float64(0.2) * avg(lineitem.l_quantity)@1, projection=[l_extendedprice@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_partkey@0, p_partkey@0)], projection=[l_quantity@1, l_extendedprice@2, p_partkey@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_partkey, l_quantity, l_extendedprice], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[p_partkey@0 as p_partkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: p_brand@1 = Brand#23 AND p_container@2 = MED BOX | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_brand, p_container], predicate=p_brand@3 = Brand#23 AND p_container@6 = MED BOX, pruning_predicate=p_brand_null_count@2 != p_brand_row_count@3 AND p_brand_min@0 <= Brand#23 AND Brand#23 <= p_brand_max@1 AND p_container_null_count@6 != p_container_row_count@7 AND p_container_min@4 <= MED BOX AND MED BOX <= p_container_max@5, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(0.2 * CAST(avg(lineitem.l_quantity)@1 AS Float64) AS Decimal128(30, 15)) as Float64(0.2) * avg(lineitem.l_quantity), l_partkey@0 as l_partkey] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_partkey@0 as l_partkey], aggr=[avg(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_partkey@0 as l_partkey], aggr=[avg(lineitem.l_quantity)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_partkey, l_quantity], predicate=true | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q18_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q18_explain.snap new file mode 100644 index 0000000000..1156f441ef --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q18_explain.snap @@ -0,0 +1,62 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q18" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: orders.o_totalprice DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST | +| | Aggregate: groupBy=[[customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice]], aggr=[[sum(lineitem.l_quantity)]] | +| | LeftSemi Join: orders.o_orderkey = __correlated_sq_1.l_orderkey | +| | Projection: customer.c_custkey, customer.c_name, orders.o_orderkey, orders.o_totalprice, orders.o_orderdate, lineitem.l_quantity | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: customer.c_custkey, customer.c_name, orders.o_orderkey, orders.o_totalprice, orders.o_orderdate | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_name] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_quantity] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: lineitem.l_orderkey | +| | Filter: sum(lineitem.l_quantity) > Decimal128(Some(30000),25,2) | +| | Aggregate: groupBy=[[lineitem.l_orderkey]], aggr=[[sum(lineitem.l_quantity)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_quantity] | +| physical_plan | SortPreservingMergeExec: [o_totalprice@4 DESC, o_orderdate@3 ASC NULLS LAST] | +| | SortExec: expr=[o_totalprice@4 DESC, o_orderdate@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_name@0 as c_name, c_custkey@1 as c_custkey, o_orderkey@2 as o_orderkey, o_orderdate@3 as o_orderdate, o_totalprice@4 as o_totalprice], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_name@0, c_custkey@1, o_orderkey@2, o_orderdate@3, o_totalprice@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_name@1 as c_name, c_custkey@0 as c_custkey, o_orderkey@2 as o_orderkey, o_orderdate@4 as o_orderdate, o_totalprice@3 as o_totalprice], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(o_orderkey@2, l_orderkey@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@2, l_orderkey@0)], projection=[c_custkey@0, c_name@1, o_orderkey@2, o_totalprice@3, o_orderdate@4, l_quantity@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_custkey@0, c_name@1, o_orderkey@2, o_totalprice@4, o_orderdate@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey, c_name], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_quantity], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(lineitem.l_quantity)@1 > Some(30000),25,2, projection=[l_orderkey@0] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_orderkey@0 as l_orderkey], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_orderkey@0 as l_orderkey], aggr=[sum(lineitem.l_quantity)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_quantity], predicate=true | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q19_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q19_explain.snap new file mode 100644 index 0000000000..4997300ea3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q19_explain.snap @@ -0,0 +1,40 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q19" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: lineitem.l_partkey = part.p_partkey Filter: part.p_brand = Utf8("Brand#12") AND part.p_container IN ([Utf8("SM CASE"), Utf8("SM BOX"), Utf8("SM PACK"), Utf8("SM PKG")]) AND lineitem.l_quantity >= Decimal128(Some(100),15,2) AND lineitem.l_quantity <= Decimal128(Some(1100),15,2) AND part.p_size <= Int64(5) OR part.p_brand = Utf8("Brand#23") AND part.p_container IN ([Utf8("MED BAG"), Utf8("MED BOX"), Utf8("MED PKG"), Utf8("MED PACK")]) AND lineitem.l_quantity >= Decimal128(Some(1000),15,2) AND lineitem.l_quantity <= Decimal128(Some(2000),15,2) AND part.p_size <= Int64(10) OR part.p_brand = Utf8("Brand#34") AND part.p_container IN ([Utf8("LG CASE"), Utf8("LG BOX"), Utf8("LG PACK"), Utf8("LG PKG")]) AND lineitem.l_quantity >= Decimal128(Some(2000),15,2) AND lineitem.l_quantity <= Decimal128(Some(3000),15,2) AND part.p_size <= Int64(15) | +| | Projection: lineitem.l_partkey, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount | +| | BytesProcessedNode | +| | Filter: (lineitem.l_quantity >= Decimal128(Some(100),15,2) AND lineitem.l_quantity <= Decimal128(Some(1100),15,2) OR lineitem.l_quantity >= Decimal128(Some(1000),15,2) AND lineitem.l_quantity <= Decimal128(Some(2000),15,2) OR lineitem.l_quantity >= Decimal128(Some(2000),15,2) AND lineitem.l_quantity <= Decimal128(Some(3000),15,2)) AND (lineitem.l_shipmode = Utf8("AIR") OR lineitem.l_shipmode = Utf8("AIR REG")) AND lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON") | +| | TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice, l_discount, l_shipinstruct, l_shipmode], partial_filters=[lineitem.l_shipmode = Utf8("AIR") OR lineitem.l_shipmode = Utf8("AIR REG"), lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON"), lineitem.l_quantity >= Decimal128(Some(100),15,2) AND lineitem.l_quantity <= Decimal128(Some(1100),15,2) OR lineitem.l_quantity >= Decimal128(Some(1000),15,2) AND lineitem.l_quantity <= Decimal128(Some(2000),15,2) OR lineitem.l_quantity >= Decimal128(Some(2000),15,2) AND lineitem.l_quantity <= Decimal128(Some(3000),15,2)] | +| | BytesProcessedNode | +| | Filter: (part.p_brand = Utf8("Brand#12") AND part.p_container IN ([Utf8("SM CASE"), Utf8("SM BOX"), Utf8("SM PACK"), Utf8("SM PKG")]) AND part.p_size <= Int64(5) OR part.p_brand = Utf8("Brand#23") AND part.p_container IN ([Utf8("MED BAG"), Utf8("MED BOX"), Utf8("MED PKG"), Utf8("MED PACK")]) AND part.p_size <= Int64(10) OR part.p_brand = Utf8("Brand#34") AND part.p_container IN ([Utf8("LG CASE"), Utf8("LG BOX"), Utf8("LG PACK"), Utf8("LG PKG")]) AND part.p_size <= Int64(15)) AND part.p_size >= Int64(1) | +| | TableScan: part projection=[p_partkey, p_brand, p_size, p_container], partial_filters=[part.p_size >= Int64(1), part.p_brand = Utf8("Brand#12") AND part.p_container IN ([Utf8("SM CASE"), Utf8("SM BOX"), Utf8("SM PACK"), Utf8("SM PKG")]) AND part.p_size <= Int64(5) OR part.p_brand = Utf8("Brand#23") AND part.p_container IN ([Utf8("MED BAG"), Utf8("MED BOX"), Utf8("MED PKG"), Utf8("MED PACK")]) AND part.p_size <= Int64(10) OR part.p_brand = Utf8("Brand#34") AND part.p_container IN ([Utf8("LG CASE"), Utf8("LG BOX"), Utf8("LG PACK"), Utf8("LG PKG")]) AND part.p_size <= Int64(15)] | +| physical_plan | ProjectionExec: expr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@0 as revenue] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_partkey@0, p_partkey@0)], filter=p_brand@1 = Brand#12 AND Use p_container@3 IN (SET) ([Literal { value: Utf8("SM CASE") }, Literal { value: Utf8("SM BOX") }, Literal { value: Utf8("SM PACK") }, Literal { value: Utf8("SM PKG") }]) AND l_quantity@0 >= Some(100),15,2 AND l_quantity@0 <= Some(1100),15,2 AND p_size@2 <= 5 OR p_brand@1 = Brand#23 AND Use p_container@3 IN (SET) ([Literal { value: Utf8("MED BAG") }, Literal { value: Utf8("MED BOX") }, Literal { value: Utf8("MED PKG") }, Literal { value: Utf8("MED PACK") }]) AND l_quantity@0 >= Some(1000),15,2 AND l_quantity@0 <= Some(2000),15,2 AND p_size@2 <= 10 OR p_brand@1 = Brand#34 AND Use p_container@3 IN (SET) ([Literal { value: Utf8("LG CASE") }, Literal { value: Utf8("LG BOX") }, Literal { value: Utf8("LG PACK") }, Literal { value: Utf8("LG PKG") }]) AND l_quantity@0 >= Some(2000),15,2 AND l_quantity@0 <= Some(3000),15,2 AND p_size@2 <= 15, projection=[l_extendedprice@2, l_discount@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_partkey@0 as l_partkey, l_quantity@1 as l_quantity, l_extendedprice@2 as l_extendedprice, l_discount@3 as l_discount] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: (l_quantity@1 >= Some(100),15,2 AND l_quantity@1 <= Some(1100),15,2 OR l_quantity@1 >= Some(1000),15,2 AND l_quantity@1 <= Some(2000),15,2 OR l_quantity@1 >= Some(2000),15,2 AND l_quantity@1 <= Some(3000),15,2) AND (l_shipmode@5 = AIR OR l_shipmode@5 = AIR REG) AND l_shipinstruct@4 = DELIVER IN PERSON | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_partkey, l_quantity, l_extendedprice, l_discount, l_shipinstruct, l_shipmode], predicate=(l_shipmode@14 = AIR OR l_shipmode@14 = AIR REG) AND l_shipinstruct@13 = DELIVER IN PERSON AND (l_quantity@4 >= Some(100),15,2 AND l_quantity@4 <= Some(1100),15,2 OR l_quantity@4 >= Some(1000),15,2 AND l_quantity@4 <= Some(2000),15,2 OR l_quantity@4 >= Some(2000),15,2 AND l_quantity@4 <= Some(3000),15,2), pruning_predicate=(l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= AIR AND AIR <= l_shipmode_max@1 OR l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= AIR REG AND AIR REG <= l_shipmode_max@1) AND l_shipinstruct_null_count@6 != l_shipinstruct_row_count@7 AND l_shipinstruct_min@4 <= DELIVER IN PERSON AND DELIVER IN PERSON <= l_shipinstruct_max@5 AND (l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_max@8 >= Some(100),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@11 <= Some(1100),15,2 OR l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_max@8 >= Some(1000),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@11 <= Some(2000),15,2 OR l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_max@8 >= Some(2000),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@11 <= Some(3000),15,2), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: (p_brand@1 = Brand#12 AND Use p_container@3 IN (SET) ([Literal { value: Utf8("SM CASE") }, Literal { value: Utf8("SM BOX") }, Literal { value: Utf8("SM PACK") }, Literal { value: Utf8("SM PKG") }]) AND p_size@2 <= 5 OR p_brand@1 = Brand#23 AND Use p_container@3 IN (SET) ([Literal { value: Utf8("MED BAG") }, Literal { value: Utf8("MED BOX") }, Literal { value: Utf8("MED PKG") }, Literal { value: Utf8("MED PACK") }]) AND p_size@2 <= 10 OR p_brand@1 = Brand#34 AND Use p_container@3 IN (SET) ([Literal { value: Utf8("LG CASE") }, Literal { value: Utf8("LG BOX") }, Literal { value: Utf8("LG PACK") }, Literal { value: Utf8("LG PKG") }]) AND p_size@2 <= 15) AND p_size@2 >= 1 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_brand, p_size, p_container], predicate=p_size@5 >= 1 AND (p_brand@3 = Brand#12 AND Use p_container@6 IN (SET) ([Literal { value: Utf8("SM CASE") }, Literal { value: Utf8("SM BOX") }, Literal { value: Utf8("SM PACK") }, Literal { value: Utf8("SM PKG") }]) AND p_size@5 <= 5 OR p_brand@3 = Brand#23 AND Use p_container@6 IN (SET) ([Literal { value: Utf8("MED BAG") }, Literal { value: Utf8("MED BOX") }, Literal { value: Utf8("MED PKG") }, Literal { value: Utf8("MED PACK") }]) AND p_size@5 <= 10 OR p_brand@3 = Brand#34 AND Use p_container@6 IN (SET) ([Literal { value: Utf8("LG CASE") }, Literal { value: Utf8("LG BOX") }, Literal { value: Utf8("LG PACK") }, Literal { value: Utf8("LG PKG") }]) AND p_size@5 <= 15), pruning_predicate=p_size_null_count@1 != p_size_row_count@2 AND p_size_max@0 >= 1 AND (p_brand_null_count@5 != p_brand_row_count@6 AND p_brand_min@3 <= Brand#12 AND Brand#12 <= p_brand_max@4 AND (p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM CASE AND SM CASE <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM BOX AND SM BOX <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM PACK AND SM PACK <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM PKG AND SM PKG <= p_container_max@8) AND p_size_null_count@1 != p_size_row_count@2 AND p_size_min@11 <= 5 OR p_brand_null_count@5 != p_brand_row_count@6 AND p_brand_min@3 <= Brand#23 AND Brand#23 <= p_brand_max@4 AND (p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED BAG AND MED BAG <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED BOX AND MED BOX <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED PKG AND MED PKG <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED PACK AND MED PACK <= p_container_max@8) AND p_size_null_count@1 != p_size_row_count@2 AND p_size_min@11 <= 10 OR p_brand_null_count@5 != p_brand_row_count@6 AND p_brand_min@3 <= Brand#34 AND Brand#34 <= p_brand_max@4 AND (p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG CASE AND LG CASE <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG BOX AND LG BOX <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG PACK AND LG PACK <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG PKG AND LG PKG <= p_container_max@8) AND p_size_null_count@1 != p_size_row_count@2 AND p_size_min@11 <= 15), required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q1_explain.snap new file mode 100644 index 0000000000..7cd61b2105 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q1_explain.snap @@ -0,0 +1,28 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q1" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lineitem.l_returnflag ASC NULLS LAST, lineitem.l_linestatus ASC NULLS LAST | +| | Projection: lineitem.l_returnflag, lineitem.l_linestatus, sum(lineitem.l_quantity) AS sum_qty, sum(lineitem.l_extendedprice) AS sum_base_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS sum_disc_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax) AS sum_charge, avg(lineitem.l_quantity) AS avg_qty, avg(lineitem.l_extendedprice) AS avg_price, avg(lineitem.l_discount) AS avg_disc, count(*) AS count_order | +| | Aggregate: groupBy=[[lineitem.l_returnflag, lineitem.l_linestatus]], aggr=[[sum(lineitem.l_quantity), sum(lineitem.l_extendedprice), sum(__common_expr_1) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount), sum(__common_expr_1 * (Decimal128(Some(1),20,0) + lineitem.l_tax)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax), avg(lineitem.l_quantity), avg(lineitem.l_extendedprice), avg(lineitem.l_discount), count(Int64(1)) AS count(*)]] | +| | Projection: lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS __common_expr_1, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_tax, lineitem.l_returnflag, lineitem.l_linestatus | +| | BytesProcessedNode | +| | Filter: lineitem.l_shipdate <= Date32("1998-09-02") | +| | TableScan: lineitem projection=[l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate], partial_filters=[lineitem.l_shipdate <= Date32("1998-09-02")] | +| physical_plan | SortPreservingMergeExec: [l_returnflag@0 ASC NULLS LAST, l_linestatus@1 ASC NULLS LAST] | +| | SortExec: expr=[l_returnflag@0 ASC NULLS LAST, l_linestatus@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_returnflag@0 as l_returnflag, l_linestatus@1 as l_linestatus, sum(lineitem.l_quantity)@2 as sum_qty, sum(lineitem.l_extendedprice)@3 as sum_base_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@4 as sum_disc_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax)@5 as sum_charge, avg(lineitem.l_quantity)@6 as avg_qty, avg(lineitem.l_extendedprice)@7 as avg_price, avg(lineitem.l_discount)@8 as avg_disc, count(*)@9 as count_order] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_returnflag@0 as l_returnflag, l_linestatus@1 as l_linestatus], aggr=[sum(lineitem.l_quantity), sum(lineitem.l_extendedprice), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax), avg(lineitem.l_quantity), avg(lineitem.l_extendedprice), avg(lineitem.l_discount), count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_returnflag@0, l_linestatus@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_returnflag@5 as l_returnflag, l_linestatus@6 as l_linestatus], aggr=[sum(lineitem.l_quantity), sum(lineitem.l_extendedprice), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax), avg(lineitem.l_quantity), avg(lineitem.l_extendedprice), avg(lineitem.l_discount), count(*)] | +| | ProjectionExec: expr=[l_extendedprice@1 * (Some(1),20,0 - l_discount@2) as __common_expr_1, l_quantity@0 as l_quantity, l_extendedprice@1 as l_extendedprice, l_discount@2 as l_discount, l_tax@3 as l_tax, l_returnflag@4 as l_returnflag, l_linestatus@5 as l_linestatus] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_shipdate@6 <= 1998-09-02 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate], predicate=l_shipdate@10 <= 1998-09-02, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@0 <= 1998-09-02, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q20_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q20_explain.snap new file mode 100644 index 0000000000..e719074e3c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q20_explain.snap @@ -0,0 +1,89 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q20" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: supplier.s_name ASC NULLS LAST | +| | Projection: supplier.s_name, supplier.s_address | +| | LeftSemi Join: supplier.s_suppkey = __correlated_sq_2.ps_suppkey | +| | Projection: supplier.s_suppkey, supplier.s_name, supplier.s_address | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_name, s_address, s_nationkey] | +| | Projection: nation.n_nationkey | +| | BytesProcessedNode | +| | Filter: nation.n_name = Utf8("CANADA") | +| | TableScan: nation projection=[n_nationkey, n_name], partial_filters=[nation.n_name = Utf8("CANADA")] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: partsupp.ps_suppkey | +| | Inner Join: partsupp.ps_partkey = __scalar_sq_3.l_partkey, partsupp.ps_suppkey = __scalar_sq_3.l_suppkey Filter: CAST(partsupp.ps_availqty AS Float64) > __scalar_sq_3.Float64(0.5) * sum(lineitem.l_quantity) | +| | LeftSemi Join: partsupp.ps_partkey = __correlated_sq_1.p_partkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: part.p_partkey | +| | BytesProcessedNode | +| | Filter: part.p_name LIKE Utf8("forest%") | +| | TableScan: part projection=[p_partkey, p_name], partial_filters=[part.p_name LIKE Utf8("forest%")] | +| | SubqueryAlias: __scalar_sq_3 | +| | Projection: Float64(0.5) * CAST(sum(lineitem.l_quantity) AS Float64), lineitem.l_partkey, lineitem.l_suppkey | +| | Aggregate: groupBy=[[lineitem.l_partkey, lineitem.l_suppkey]], aggr=[[sum(lineitem.l_quantity)]] | +| | Projection: lineitem.l_partkey, lineitem.l_suppkey, lineitem.l_quantity | +| | BytesProcessedNode | +| | Filter: lineitem.l_shipdate >= Date32("1994-01-01") AND lineitem.l_shipdate < Date32("1995-01-01") | +| | TableScan: lineitem projection=[l_partkey, l_suppkey, l_quantity, l_shipdate], partial_filters=[lineitem.l_shipdate >= Date32("1994-01-01"), lineitem.l_shipdate < Date32("1995-01-01")] | +| physical_plan | SortPreservingMergeExec: [s_name@0 ASC NULLS LAST] | +| | SortExec: expr=[s_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(s_suppkey@0, ps_suppkey@0)], projection=[s_name@1, s_address@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[s_suppkey@0, s_name@1, s_address@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@3], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_name, s_address, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[n_nationkey@0 as n_nationkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: n_name@1 = CANADA | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = CANADA, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= CANADA AND CANADA <= n_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_partkey@0, l_partkey@1), (ps_suppkey@1, l_suppkey@2)], filter=CAST(ps_availqty@0 AS Float64) > Float64(0.5) * sum(lineitem.l_quantity)@1, projection=[ps_suppkey@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0, ps_suppkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ps_partkey@0, p_partkey@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:0..1705770], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:1705770..3411540], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:3411540..5117310], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:5117310..6823080], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:6823080..8528850], ...]}, projection=[ps_partkey, ps_suppkey, ps_availqty], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[p_partkey@0 as p_partkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: p_name@1 LIKE forest% | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_name], predicate=p_name@1 LIKE forest%, pruning_predicate=p_name_null_count@2 != p_name_row_count@3 AND p_name_min@0 <= foresu AND forest <= p_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[0.5 * CAST(sum(lineitem.l_quantity)@2 AS Float64) as Float64(0.5) * sum(lineitem.l_quantity), l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0, l_suppkey@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey], aggr=[sum(lineitem.l_quantity)] | +| | ProjectionExec: expr=[l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey, l_quantity@2 as l_quantity] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_shipdate@3 >= 1994-01-01 AND l_shipdate@3 < 1995-01-01 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_partkey, l_suppkey, l_quantity, l_shipdate], predicate=l_shipdate@10 >= 1994-01-01 AND l_shipdate@10 < 1995-01-01, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1994-01-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 < 1995-01-01, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q21_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q21_explain.snap new file mode 100644 index 0000000000..376937c5dd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q21_explain.snap @@ -0,0 +1,107 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q21" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: numwait DESC NULLS FIRST, supplier.s_name ASC NULLS LAST, fetch=100 | +| | Projection: supplier.s_name, count(*) AS numwait | +| | Aggregate: groupBy=[[supplier.s_name]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: supplier.s_name | +| | LeftAnti Join: l1.l_orderkey = __correlated_sq_2.l_orderkey Filter: __correlated_sq_2.l_suppkey != l1.l_suppkey | +| | LeftSemi Join: l1.l_orderkey = __correlated_sq_1.l_orderkey Filter: __correlated_sq_1.l_suppkey != l1.l_suppkey | +| | Projection: supplier.s_name, l1.l_orderkey, l1.l_suppkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: supplier.s_name, supplier.s_nationkey, l1.l_orderkey, l1.l_suppkey | +| | Inner Join: l1.l_orderkey = orders.o_orderkey | +| | Projection: supplier.s_name, supplier.s_nationkey, l1.l_orderkey, l1.l_suppkey | +| | Inner Join: supplier.s_suppkey = l1.l_suppkey | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_name, s_nationkey] | +| | SubqueryAlias: l1 | +| | Projection: lineitem.l_orderkey, lineitem.l_suppkey | +| | BytesProcessedNode | +| | Filter: lineitem.l_receiptdate > lineitem.l_commitdate | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_commitdate, l_receiptdate], partial_filters=[lineitem.l_receiptdate > lineitem.l_commitdate] | +| | Projection: orders.o_orderkey | +| | BytesProcessedNode | +| | Filter: orders.o_orderstatus = Utf8("F") | +| | TableScan: orders projection=[o_orderkey, o_orderstatus], partial_filters=[orders.o_orderstatus = Utf8("F")] | +| | Projection: nation.n_nationkey | +| | BytesProcessedNode | +| | Filter: nation.n_name = Utf8("SAUDI ARABIA") | +| | TableScan: nation projection=[n_nationkey, n_name], partial_filters=[nation.n_name = Utf8("SAUDI ARABIA")] | +| | SubqueryAlias: __correlated_sq_1 | +| | SubqueryAlias: l2 | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey] | +| | SubqueryAlias: __correlated_sq_2 | +| | SubqueryAlias: l3 | +| | Projection: lineitem.l_orderkey, lineitem.l_suppkey | +| | BytesProcessedNode | +| | Filter: lineitem.l_receiptdate > lineitem.l_commitdate | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_commitdate, l_receiptdate], partial_filters=[lineitem.l_receiptdate > lineitem.l_commitdate] | +| physical_plan | SortPreservingMergeExec: [numwait@1 DESC, s_name@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[numwait@1 DESC, s_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_name@0 as s_name, count(*)@1 as numwait] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_name@0 as s_name], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_name@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_name@0 as s_name], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(l_orderkey@1, l_orderkey@0)], filter=l_suppkey@1 != l_suppkey@0, projection=[s_name@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(l_orderkey@1, l_orderkey@0)], filter=l_suppkey@1 != l_suppkey@0 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@1, n_nationkey@0)], projection=[s_name@0, l_orderkey@2, l_suppkey@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@2, o_orderkey@0)], projection=[s_name@0, s_nationkey@1, l_orderkey@2, l_suppkey@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1)], projection=[s_name@1, s_nationkey@2, l_orderkey@3, l_suppkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_name, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey, l_suppkey@1 as l_suppkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_receiptdate@3 > l_commitdate@2 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_suppkey, l_commitdate, l_receiptdate], predicate=l_receiptdate@12 > l_commitdate@11 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[o_orderkey@0 as o_orderkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: o_orderstatus@1 = F | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_orderstatus], predicate=o_orderstatus@2 = F, pruning_predicate=o_orderstatus_null_count@2 != o_orderstatus_row_count@3 AND o_orderstatus_min@0 <= F AND F <= o_orderstatus_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[n_nationkey@0 as n_nationkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: n_name@1 = SAUDI ARABIA | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = SAUDI ARABIA, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= SAUDI ARABIA AND SAUDI ARABIA <= n_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_suppkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey, l_suppkey@1 as l_suppkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_receiptdate@3 > l_commitdate@2 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_suppkey, l_commitdate, l_receiptdate], predicate=l_receiptdate@12 > l_commitdate@11 | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q22_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q22_explain.snap new file mode 100644 index 0000000000..f83db86eaa --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q22_explain.snap @@ -0,0 +1,60 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q22" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: custsale.cntrycode ASC NULLS LAST | +| | Projection: custsale.cntrycode, count(*) AS numcust, sum(custsale.c_acctbal) AS totacctbal | +| | Aggregate: groupBy=[[custsale.cntrycode]], aggr=[[count(Int64(1)) AS count(*), sum(custsale.c_acctbal)]] | +| | SubqueryAlias: custsale | +| | Projection: substr(customer.c_phone, Int64(1), Int64(2)) AS cntrycode, customer.c_acctbal | +| | Inner Join: Filter: CAST(customer.c_acctbal AS Decimal128(19, 6)) > __scalar_sq_2.avg(customer.c_acctbal) | +| | Projection: customer.c_phone, customer.c_acctbal | +| | LeftAnti Join: customer.c_custkey = __correlated_sq_1.o_custkey | +| | BytesProcessedNode | +| | Filter: substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")]) | +| | TableScan: customer projection=[c_custkey, c_phone, c_acctbal], partial_filters=[substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")])] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_custkey] | +| | SubqueryAlias: __scalar_sq_2 | +| | Aggregate: groupBy=[[]], aggr=[[avg(customer.c_acctbal)]] | +| | Projection: customer.c_acctbal | +| | BytesProcessedNode | +| | Filter: customer.c_acctbal > Decimal128(Some(0),15,2) AND substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")]) | +| | TableScan: customer projection=[c_phone, c_acctbal], partial_filters=[customer.c_acctbal > Decimal128(Some(0),15,2), substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")])] | +| physical_plan | SortPreservingMergeExec: [cntrycode@0 ASC NULLS LAST] | +| | SortExec: expr=[cntrycode@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[cntrycode@0 as cntrycode, count(*)@1 as numcust, sum(custsale.c_acctbal)@2 as totacctbal] | +| | AggregateExec: mode=FinalPartitioned, gby=[cntrycode@0 as cntrycode], aggr=[count(*), sum(custsale.c_acctbal)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cntrycode@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cntrycode@0 as cntrycode], aggr=[count(*), sum(custsale.c_acctbal)] | +| | ProjectionExec: expr=[substr(c_phone@0, 1, 2) as cntrycode, c_acctbal@1 as c_acctbal] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | NestedLoopJoinExec: join_type=Inner, filter=CAST(c_acctbal@0 AS Decimal128(19, 6)) > avg(customer.c_acctbal)@1 | +| | CoalescePartitionsExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(c_custkey@0, o_custkey@0)], projection=[c_phone@1, c_acctbal@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: Use substr(c_phone@1, 1, 2) IN (SET) ([Literal { value: Utf8("13") }, Literal { value: Utf8("31") }, Literal { value: Utf8("23") }, Literal { value: Utf8("29") }, Literal { value: Utf8("30") }, Literal { value: Utf8("18") }, Literal { value: Utf8("17") }]) | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey, c_phone, c_acctbal], predicate=Use substr(c_phone@4, 1, 2) IN (SET) ([Literal { value: Utf8("13") }, Literal { value: Utf8("31") }, Literal { value: Utf8("23") }, Literal { value: Utf8("29") }, Literal { value: Utf8("30") }, Literal { value: Utf8("18") }, Literal { value: Utf8("17") }]) | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_custkey], predicate=true | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(customer.c_acctbal)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(customer.c_acctbal)] | +| | ProjectionExec: expr=[c_acctbal@1 as c_acctbal] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: c_acctbal@1 > Some(0),15,2 AND Use substr(c_phone@0, 1, 2) IN (SET) ([Literal { value: Utf8("13") }, Literal { value: Utf8("31") }, Literal { value: Utf8("23") }, Literal { value: Utf8("29") }, Literal { value: Utf8("30") }, Literal { value: Utf8("18") }, Literal { value: Utf8("17") }]) | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_phone, c_acctbal], predicate=c_acctbal@5 > Some(0),15,2 AND Use substr(c_phone@4, 1, 2) IN (SET) ([Literal { value: Utf8("13") }, Literal { value: Utf8("31") }, Literal { value: Utf8("23") }, Literal { value: Utf8("29") }, Literal { value: Utf8("30") }, Literal { value: Utf8("18") }, Literal { value: Utf8("17") }]), pruning_predicate=c_acctbal_null_count@1 != c_acctbal_row_count@2 AND c_acctbal_max@0 > Some(0),15,2, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q2_explain.snap new file mode 100644 index 0000000000..fa5b98cb0f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q2_explain.snap @@ -0,0 +1,144 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q2" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: supplier.s_acctbal DESC NULLS FIRST, nation.n_name ASC NULLS LAST, supplier.s_name ASC NULLS LAST, part.p_partkey ASC NULLS LAST, fetch=100 | +| | Projection: supplier.s_acctbal, supplier.s_name, nation.n_name, part.p_partkey, part.p_mfgr, supplier.s_address, supplier.s_phone, supplier.s_comment | +| | Inner Join: part.p_partkey = __scalar_sq_1.ps_partkey, partsupp.ps_supplycost = __scalar_sq_1.min(partsupp.ps_supplycost) | +| | Projection: part.p_partkey, part.p_mfgr, supplier.s_name, supplier.s_address, supplier.s_phone, supplier.s_acctbal, supplier.s_comment, partsupp.ps_supplycost, nation.n_name | +| | Inner Join: nation.n_regionkey = region.r_regionkey | +| | Projection: part.p_partkey, part.p_mfgr, supplier.s_name, supplier.s_address, supplier.s_phone, supplier.s_acctbal, supplier.s_comment, partsupp.ps_supplycost, nation.n_name, nation.n_regionkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: part.p_partkey, part.p_mfgr, supplier.s_name, supplier.s_address, supplier.s_nationkey, supplier.s_phone, supplier.s_acctbal, supplier.s_comment, partsupp.ps_supplycost | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | Projection: part.p_partkey, part.p_mfgr, partsupp.ps_suppkey, partsupp.ps_supplycost | +| | Inner Join: part.p_partkey = partsupp.ps_partkey | +| | Projection: part.p_partkey, part.p_mfgr | +| | BytesProcessedNode | +| | Filter: part.p_size = Int64(15) AND part.p_type LIKE Utf8("%BRASS") | +| | TableScan: part projection=[p_partkey, p_mfgr, p_type, p_size], partial_filters=[part.p_size = Int64(15), part.p_type LIKE Utf8("%BRASS")] | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name, n_regionkey] | +| | Projection: region.r_regionkey | +| | BytesProcessedNode | +| | Filter: region.r_name = Utf8("EUROPE") | +| | TableScan: region projection=[r_regionkey, r_name], partial_filters=[region.r_name = Utf8("EUROPE")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: min(partsupp.ps_supplycost), partsupp.ps_partkey | +| | Aggregate: groupBy=[[partsupp.ps_partkey]], aggr=[[min(partsupp.ps_supplycost)]] | +| | Projection: partsupp.ps_partkey, partsupp.ps_supplycost | +| | Inner Join: nation.n_regionkey = region.r_regionkey | +| | Projection: partsupp.ps_partkey, partsupp.ps_supplycost, nation.n_regionkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: partsupp.ps_partkey, partsupp.ps_supplycost, supplier.s_nationkey | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_regionkey] | +| | Projection: region.r_regionkey | +| | BytesProcessedNode | +| | Filter: region.r_name = Utf8("EUROPE") | +| | TableScan: region projection=[r_regionkey, r_name], partial_filters=[region.r_name = Utf8("EUROPE")] | +| physical_plan | SortPreservingMergeExec: [s_acctbal@0 DESC, n_name@2 ASC NULLS LAST, s_name@1 ASC NULLS LAST, p_partkey@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[s_acctbal@0 DESC, n_name@2 ASC NULLS LAST, s_name@1 ASC NULLS LAST, p_partkey@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_acctbal@5 as s_acctbal, s_name@2 as s_name, n_name@7 as n_name, p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_address@3 as s_address, s_phone@4 as s_phone, s_comment@6 as s_comment] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, ps_partkey@1), (ps_supplycost@7, min(partsupp.ps_supplycost)@0)], projection=[p_partkey@0, p_mfgr@1, s_name@2, s_address@3, s_phone@4, s_acctbal@5, s_comment@6, n_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0, ps_supplycost@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@9, r_regionkey@0)], projection=[p_partkey@0, p_mfgr@1, s_name@2, s_address@3, s_phone@4, s_acctbal@5, s_comment@6, ps_supplycost@7, n_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@9], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@4, n_nationkey@0)], projection=[p_partkey@0, p_mfgr@1, s_name@2, s_address@3, s_phone@5, s_acctbal@6, s_comment@7, ps_supplycost@8, n_name@10, n_regionkey@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@4], 24), input_partitions=24 | +| | ProjectionExec: expr=[p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_name@3 as s_name, s_address@4 as s_address, s_nationkey@5 as s_nationkey, s_phone@6 as s_phone, s_acctbal@7 as s_acctbal, s_comment@8 as s_comment, ps_supplycost@2 as ps_supplycost] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@2, s_suppkey@0)], projection=[p_partkey@0, p_mfgr@1, ps_supplycost@3, s_name@5, s_address@6, s_nationkey@7, s_phone@8, s_acctbal@9, s_comment@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, ps_partkey@0)], projection=[p_partkey@0, p_mfgr@1, ps_suppkey@3, ps_supplycost@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: p_size@3 = 15 AND p_type@2 LIKE %BRASS | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_mfgr, p_type, p_size], predicate=p_size@5 = 15 AND p_type@4 LIKE %BRASS, pruning_predicate=p_size_null_count@2 != p_size_row_count@3 AND p_size_min@0 <= 15 AND 15 <= p_size_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:0..1705770], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:1705770..3411540], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:3411540..5117310], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:5117310..6823080], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:6823080..8528850], ...]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name, n_regionkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[r_regionkey@0 as r_regionkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: r_name@1 = EUROPE | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/95ed0c17-d141-4fcd-a5df-95144fc57106/part-00000-c58f7890-0077-4c26-8506-1b5a49759ef1.c000.snappy.parquet]]}, projection=[r_regionkey, r_name], predicate=r_name@1 = EUROPE, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= EUROPE AND EUROPE <= r_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@1, min(partsupp.ps_supplycost)@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[min(partsupp.ps_supplycost)@1 as min(partsupp.ps_supplycost), ps_partkey@0 as ps_partkey] | +| | AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[min(partsupp.ps_supplycost)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[min(partsupp.ps_supplycost)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@2, r_regionkey@0)], projection=[ps_partkey@0, ps_supplycost@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[ps_partkey@0, ps_supplycost@1, n_regionkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@1, s_suppkey@0)], projection=[ps_partkey@0, ps_supplycost@2, s_nationkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:0..1705770], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:1705770..3411540], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:3411540..5117310], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:5117310..6823080], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:6823080..8528850], ...]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_regionkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[r_regionkey@0 as r_regionkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: r_name@1 = EUROPE | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/95ed0c17-d141-4fcd-a5df-95144fc57106/part-00000-c58f7890-0077-4c26-8506-1b5a49759ef1.c000.snappy.parquet]]}, projection=[r_regionkey, r_name], predicate=r_name@1 = EUROPE, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= EUROPE AND EUROPE <= r_name_max@1, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q3_explain.snap new file mode 100644 index 0000000000..5c9002b436 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q3_explain.snap @@ -0,0 +1,60 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q3" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: revenue DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST, fetch=10 | +| | Projection: lineitem.l_orderkey, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue, orders.o_orderdate, orders.o_shippriority | +| | Aggregate: groupBy=[[lineitem.l_orderkey, orders.o_orderdate, orders.o_shippriority]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: orders.o_orderdate, orders.o_shippriority, lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: orders.o_orderkey, orders.o_orderdate, orders.o_shippriority | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | Projection: customer.c_custkey | +| | BytesProcessedNode | +| | Filter: customer.c_mktsegment = Utf8("BUILDING") | +| | TableScan: customer projection=[c_custkey, c_mktsegment], partial_filters=[customer.c_mktsegment = Utf8("BUILDING")] | +| | BytesProcessedNode | +| | Filter: orders.o_orderdate < Date32("1995-03-15") | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate, o_shippriority], partial_filters=[orders.o_orderdate < Date32("1995-03-15")] | +| | Projection: lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount | +| | BytesProcessedNode | +| | Filter: lineitem.l_shipdate > Date32("1995-03-15") | +| | TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount, l_shipdate], partial_filters=[lineitem.l_shipdate > Date32("1995-03-15")] | +| physical_plan | SortPreservingMergeExec: [revenue@1 DESC, o_orderdate@2 ASC NULLS LAST], fetch=10 | +| | SortExec: TopK(fetch=10), expr=[revenue@1 DESC, o_orderdate@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@3 as revenue, o_orderdate@1 as o_orderdate, o_shippriority@2 as o_shippriority] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_orderkey@0 as l_orderkey, o_orderdate@1 as o_orderdate, o_shippriority@2 as o_shippriority], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0, o_orderdate@1, o_shippriority@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_orderkey@2 as l_orderkey, o_orderdate@0 as o_orderdate, o_shippriority@1 as o_shippriority], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@0, l_orderkey@0)], projection=[o_orderdate@1, o_shippriority@2, l_orderkey@3, l_extendedprice@4, l_discount@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[o_orderkey@1, o_orderdate@3, o_shippriority@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[c_custkey@0 as c_custkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: c_mktsegment@1 = BUILDING | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey, c_mktsegment], predicate=c_mktsegment@6 = BUILDING, pruning_predicate=c_mktsegment_null_count@2 != c_mktsegment_row_count@3 AND c_mktsegment_min@0 <= BUILDING AND BUILDING <= c_mktsegment_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: o_orderdate@2 < 1995-03-15 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_custkey, o_orderdate, o_shippriority], predicate=o_orderdate@4 < 1995-03-15, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@0 < 1995-03-15, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey, l_extendedprice@1 as l_extendedprice, l_discount@2 as l_discount] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_shipdate@3 > 1995-03-15 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_extendedprice, l_discount, l_shipdate], predicate=l_shipdate@10 > 1995-03-15, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 > 1995-03-15, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q4_explain.snap new file mode 100644 index 0000000000..eaaea022d7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q4_explain.snap @@ -0,0 +1,46 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q4" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: orders.o_orderpriority ASC NULLS LAST | +| | Projection: orders.o_orderpriority, count(*) AS order_count | +| | Aggregate: groupBy=[[orders.o_orderpriority]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: orders.o_orderpriority | +| | LeftSemi Join: orders.o_orderkey = __correlated_sq_1.l_orderkey | +| | Projection: orders.o_orderkey, orders.o_orderpriority | +| | BytesProcessedNode | +| | Filter: orders.o_orderdate >= Date32("1993-07-01") AND orders.o_orderdate < Date32("1993-10-01") | +| | TableScan: orders projection=[o_orderkey, o_orderdate, o_orderpriority], partial_filters=[orders.o_orderdate >= Date32("1993-07-01"), orders.o_orderdate < Date32("1993-10-01")] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: lineitem.l_orderkey | +| | BytesProcessedNode | +| | Filter: lineitem.l_receiptdate > lineitem.l_commitdate | +| | TableScan: lineitem projection=[l_orderkey, l_commitdate, l_receiptdate], partial_filters=[lineitem.l_receiptdate > lineitem.l_commitdate] | +| physical_plan | SortPreservingMergeExec: [o_orderpriority@0 ASC NULLS LAST] | +| | SortExec: expr=[o_orderpriority@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[o_orderpriority@0 as o_orderpriority, count(*)@1 as order_count] | +| | AggregateExec: mode=FinalPartitioned, gby=[o_orderpriority@0 as o_orderpriority], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderpriority@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[o_orderpriority@0 as o_orderpriority], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(o_orderkey@0, l_orderkey@0)], projection=[o_orderpriority@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[o_orderkey@0 as o_orderkey, o_orderpriority@2 as o_orderpriority] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: o_orderdate@1 >= 1993-07-01 AND o_orderdate@1 < 1993-10-01 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_orderdate, o_orderpriority], predicate=o_orderdate@4 >= 1993-07-01 AND o_orderdate@4 < 1993-10-01, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1993-07-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 < 1993-10-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_receiptdate@2 > l_commitdate@1 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_commitdate, l_receiptdate], predicate=l_receiptdate@12 > l_commitdate@11 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q5_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q5_explain.snap new file mode 100644 index 0000000000..d5c9e99819 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q5_explain.snap @@ -0,0 +1,96 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q5" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: revenue DESC NULLS FIRST | +| | Projection: nation.n_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[nation.n_name]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, nation.n_name | +| | Inner Join: nation.n_regionkey = region.r_regionkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, nation.n_name, nation.n_regionkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey | +| | Inner Join: lineitem.l_suppkey = supplier.s_suppkey, customer.c_nationkey = supplier.s_nationkey | +| | Projection: customer.c_nationkey, lineitem.l_suppkey, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: customer.c_nationkey, orders.o_orderkey | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | Projection: orders.o_orderkey, orders.o_custkey | +| | BytesProcessedNode | +| | Filter: orders.o_orderdate >= Date32("1994-01-01") AND orders.o_orderdate < Date32("1995-01-01") | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate], partial_filters=[orders.o_orderdate >= Date32("1994-01-01"), orders.o_orderdate < Date32("1995-01-01")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name, n_regionkey] | +| | Projection: region.r_regionkey | +| | BytesProcessedNode | +| | Filter: region.r_name = Utf8("ASIA") | +| | TableScan: region projection=[r_regionkey, r_name], partial_filters=[region.r_name = Utf8("ASIA")] | +| physical_plan | SortPreservingMergeExec: [revenue@1 DESC] | +| | SortExec: expr=[revenue@1 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[n_name@0 as n_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 as revenue] | +| | AggregateExec: mode=FinalPartitioned, gby=[n_name@0 as n_name], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_name@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[n_name@2 as n_name], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@3, r_regionkey@0)], projection=[l_extendedprice@0, l_discount@1, n_name@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[l_extendedprice@0, l_discount@1, n_name@4, n_regionkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@1, s_suppkey@0), (c_nationkey@0, s_nationkey@1)], projection=[l_extendedprice@2, l_discount@3, s_nationkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1, c_nationkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@1, l_orderkey@0)], projection=[c_nationkey@0, l_suppkey@3, l_extendedprice@4, l_discount@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_nationkey@1, o_orderkey@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey, c_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[o_orderkey@0 as o_orderkey, o_custkey@1 as o_custkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: o_orderdate@2 >= 1994-01-01 AND o_orderdate@2 < 1995-01-01 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_custkey, o_orderdate], predicate=o_orderdate@4 >= 1994-01-01 AND o_orderdate@4 < 1995-01-01, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1994-01-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 < 1995-01-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0, s_nationkey@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name, n_regionkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[r_regionkey@0 as r_regionkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: r_name@1 = ASIA | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/95ed0c17-d141-4fcd-a5df-95144fc57106/part-00000-c58f7890-0077-4c26-8506-1b5a49759ef1.c000.snappy.parquet]]}, projection=[r_regionkey, r_name], predicate=r_name@1 = ASIA, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= ASIA AND ASIA <= r_name_max@1, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q6_explain.snap new file mode 100644 index 0000000000..aeb9c28644 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q6_explain.snap @@ -0,0 +1,24 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q6" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: sum(lineitem.l_extendedprice * lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice * lineitem.l_discount)]] | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount | +| | BytesProcessedNode | +| | Filter: lineitem.l_shipdate >= Date32("1994-01-01") AND lineitem.l_shipdate < Date32("1995-01-01") AND lineitem.l_discount >= Decimal128(Some(5),15,2) AND lineitem.l_discount <= Decimal128(Some(7),15,2) AND lineitem.l_quantity < Decimal128(Some(2400),15,2) | +| | TableScan: lineitem projection=[l_quantity, l_extendedprice, l_discount, l_shipdate], partial_filters=[lineitem.l_shipdate >= Date32("1994-01-01"), lineitem.l_shipdate < Date32("1995-01-01"), lineitem.l_discount >= Decimal128(Some(5),15,2), lineitem.l_discount <= Decimal128(Some(7),15,2), lineitem.l_quantity < Decimal128(Some(2400),15,2)] | +| physical_plan | ProjectionExec: expr=[sum(lineitem.l_extendedprice * lineitem.l_discount)@0 as revenue] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(lineitem.l_extendedprice * lineitem.l_discount)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(lineitem.l_extendedprice * lineitem.l_discount)] | +| | ProjectionExec: expr=[l_extendedprice@1 as l_extendedprice, l_discount@2 as l_discount] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_shipdate@3 >= 1994-01-01 AND l_shipdate@3 < 1995-01-01 AND l_discount@2 >= Some(5),15,2 AND l_discount@2 <= Some(7),15,2 AND l_quantity@0 < Some(2400),15,2 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_quantity, l_extendedprice, l_discount, l_shipdate], predicate=l_shipdate@10 >= 1994-01-01 AND l_shipdate@10 < 1995-01-01 AND l_discount@6 >= Some(5),15,2 AND l_discount@6 <= Some(7),15,2 AND l_quantity@4 < Some(2400),15,2, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1994-01-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 < 1995-01-01 AND l_discount_null_count@5 != l_discount_row_count@6 AND l_discount_max@4 >= Some(5),15,2 AND l_discount_null_count@5 != l_discount_row_count@6 AND l_discount_min@7 <= Some(7),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@8 < Some(2400),15,2, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q7_explain.snap new file mode 100644 index 0000000000..3355251b12 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q7_explain.snap @@ -0,0 +1,99 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q7" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: shipping.supp_nation ASC NULLS LAST, shipping.cust_nation ASC NULLS LAST, shipping.l_year ASC NULLS LAST | +| | Projection: shipping.supp_nation, shipping.cust_nation, shipping.l_year, sum(shipping.volume) AS revenue | +| | Aggregate: groupBy=[[shipping.supp_nation, shipping.cust_nation, shipping.l_year]], aggr=[[sum(shipping.volume)]] | +| | SubqueryAlias: shipping | +| | Projection: n1.n_name AS supp_nation, n2.n_name AS cust_nation, date_part(Utf8("YEAR"), lineitem.l_shipdate) AS l_year, lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS volume | +| | Inner Join: customer.c_nationkey = n2.n_nationkey Filter: n1.n_name = Utf8("FRANCE") AND n2.n_name = Utf8("GERMANY") OR n1.n_name = Utf8("GERMANY") AND n2.n_name = Utf8("FRANCE") | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate, customer.c_nationkey, n1.n_name | +| | Inner Join: supplier.s_nationkey = n1.n_nationkey | +| | Projection: supplier.s_nationkey, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate, customer.c_nationkey | +| | Inner Join: orders.o_custkey = customer.c_custkey | +| | Projection: supplier.s_nationkey, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate, orders.o_custkey | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | Projection: supplier.s_nationkey, lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate | +| | Inner Join: supplier.s_suppkey = lineitem.l_suppkey | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | Filter: lineitem.l_shipdate >= Date32("1995-01-01") AND lineitem.l_shipdate <= Date32("1996-12-31") | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount, l_shipdate], partial_filters=[lineitem.l_shipdate >= Date32("1995-01-01"), lineitem.l_shipdate <= Date32("1996-12-31")] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | SubqueryAlias: n1 | +| | BytesProcessedNode | +| | Filter: nation.n_name = Utf8("FRANCE") OR nation.n_name = Utf8("GERMANY") | +| | TableScan: nation projection=[n_nationkey, n_name], partial_filters=[nation.n_name = Utf8("FRANCE") OR nation.n_name = Utf8("GERMANY")] | +| | SubqueryAlias: n2 | +| | BytesProcessedNode | +| | Filter: nation.n_name = Utf8("GERMANY") OR nation.n_name = Utf8("FRANCE") | +| | TableScan: nation projection=[n_nationkey, n_name], partial_filters=[nation.n_name = Utf8("GERMANY") OR nation.n_name = Utf8("FRANCE")] | +| physical_plan | SortPreservingMergeExec: [supp_nation@0 ASC NULLS LAST, cust_nation@1 ASC NULLS LAST, l_year@2 ASC NULLS LAST] | +| | SortExec: expr=[supp_nation@0 ASC NULLS LAST, cust_nation@1 ASC NULLS LAST, l_year@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[supp_nation@0 as supp_nation, cust_nation@1 as cust_nation, l_year@2 as l_year, sum(shipping.volume)@3 as revenue] | +| | AggregateExec: mode=FinalPartitioned, gby=[supp_nation@0 as supp_nation, cust_nation@1 as cust_nation, l_year@2 as l_year], aggr=[sum(shipping.volume)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([supp_nation@0, cust_nation@1, l_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[supp_nation@0 as supp_nation, cust_nation@1 as cust_nation, l_year@2 as l_year], aggr=[sum(shipping.volume)] | +| | ProjectionExec: expr=[n_name@3 as supp_nation, n_name@4 as cust_nation, date_part(YEAR, l_shipdate@2) as l_year, l_extendedprice@0 * (Some(1),20,0 - l_discount@1) as volume] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_nationkey@3, n_nationkey@0)], filter=n_name@0 = FRANCE AND n_name@1 = GERMANY OR n_name@0 = GERMANY AND n_name@1 = FRANCE, projection=[l_extendedprice@0, l_discount@1, l_shipdate@2, n_name@4, n_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@0, n_nationkey@0)], projection=[l_extendedprice@1, l_discount@2, l_shipdate@3, c_nationkey@4, n_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_custkey@4, c_custkey@0)], projection=[s_nationkey@0, l_extendedprice@1, l_discount@2, l_shipdate@3, c_nationkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@1, o_orderkey@0)], projection=[s_nationkey@0, l_extendedprice@2, l_discount@3, l_shipdate@4, o_custkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1)], projection=[s_nationkey@1, l_orderkey@2, l_extendedprice@4, l_discount@5, l_shipdate@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: l_shipdate@4 >= 1995-01-01 AND l_shipdate@4 <= 1996-12-31 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount, l_shipdate], predicate=l_shipdate@10 >= 1995-01-01 AND l_shipdate@10 <= 1996-12-31, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1995-01-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 <= 1996-12-31, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_custkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey, c_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: n_name@1 = FRANCE OR n_name@1 = GERMANY | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = FRANCE OR n_name@1 = GERMANY, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= FRANCE AND FRANCE <= n_name_max@1 OR n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: n_name@1 = GERMANY OR n_name@1 = FRANCE | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = GERMANY OR n_name@1 = FRANCE, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1 OR n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= FRANCE AND FRANCE <= n_name_max@1, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q8_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q8_explain.snap new file mode 100644 index 0000000000..abd06422dd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q8_explain.snap @@ -0,0 +1,129 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q8" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: all_nations.o_year ASC NULLS LAST | +| | Projection: all_nations.o_year, sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END) / sum(all_nations.volume) AS mkt_share | +| | Aggregate: groupBy=[[all_nations.o_year]], aggr=[[sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Decimal128(Some(0),38,4) END) AS sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END), sum(all_nations.volume)]] | +| | SubqueryAlias: all_nations | +| | Projection: date_part(Utf8("YEAR"), orders.o_orderdate) AS o_year, lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS volume, n2.n_name AS nation | +| | Inner Join: n1.n_regionkey = region.r_regionkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, orders.o_orderdate, n1.n_regionkey, n2.n_name | +| | Inner Join: supplier.s_nationkey = n2.n_nationkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, orders.o_orderdate, n1.n_regionkey | +| | Inner Join: customer.c_nationkey = n1.n_nationkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, orders.o_orderdate, customer.c_nationkey | +| | Inner Join: orders.o_custkey = customer.c_custkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, orders.o_custkey, orders.o_orderdate | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | Projection: lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey | +| | Inner Join: lineitem.l_suppkey = supplier.s_suppkey | +| | Projection: lineitem.l_orderkey, lineitem.l_suppkey, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: part.p_partkey = lineitem.l_partkey | +| | Projection: part.p_partkey | +| | BytesProcessedNode | +| | Filter: part.p_type = Utf8("ECONOMY ANODIZED STEEL") | +| | TableScan: part projection=[p_partkey, p_type], partial_filters=[part.p_type = Utf8("ECONOMY ANODIZED STEEL")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_partkey, l_suppkey, l_extendedprice, l_discount] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | Filter: orders.o_orderdate >= Date32("1995-01-01") AND orders.o_orderdate <= Date32("1996-12-31") | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate], partial_filters=[orders.o_orderdate >= Date32("1995-01-01"), orders.o_orderdate <= Date32("1996-12-31")] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | SubqueryAlias: n1 | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_regionkey] | +| | SubqueryAlias: n2 | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name] | +| | Projection: region.r_regionkey | +| | BytesProcessedNode | +| | Filter: region.r_name = Utf8("AMERICA") | +| | TableScan: region projection=[r_regionkey, r_name], partial_filters=[region.r_name = Utf8("AMERICA")] | +| physical_plan | SortPreservingMergeExec: [o_year@0 ASC NULLS LAST] | +| | SortExec: expr=[o_year@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[o_year@0 as o_year, sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END)@1 / sum(all_nations.volume)@2 as mkt_share] | +| | AggregateExec: mode=FinalPartitioned, gby=[o_year@0 as o_year], aggr=[sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END), sum(all_nations.volume)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_year@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[o_year@0 as o_year], aggr=[sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END), sum(all_nations.volume)] | +| | ProjectionExec: expr=[date_part(YEAR, o_orderdate@2) as o_year, l_extendedprice@0 * (Some(1),20,0 - l_discount@1) as volume, n_name@3 as nation] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@3, r_regionkey@0)], projection=[l_extendedprice@0, l_discount@1, o_orderdate@2, n_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[l_extendedprice@0, l_discount@1, o_orderdate@3, n_regionkey@4, n_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_nationkey@4, n_nationkey@0)], projection=[l_extendedprice@0, l_discount@1, s_nationkey@2, o_orderdate@3, n_regionkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_nationkey@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_custkey@3, c_custkey@0)], projection=[l_extendedprice@0, l_discount@1, s_nationkey@2, o_orderdate@4, c_nationkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@0, o_orderkey@0)], projection=[l_extendedprice@1, l_discount@2, s_nationkey@3, o_custkey@5, o_orderdate@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@1, s_suppkey@0)], projection=[l_orderkey@0, l_extendedprice@2, l_discount@3, s_nationkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, l_partkey@1)], projection=[l_orderkey@1, l_suppkey@3, l_extendedprice@4, l_discount@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[p_partkey@0 as p_partkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: p_type@1 = ECONOMY ANODIZED STEEL | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_type], predicate=p_type@4 = ECONOMY ANODIZED STEEL, pruning_predicate=p_type_null_count@2 != p_type_row_count@3 AND p_type_min@0 <= ECONOMY ANODIZED STEEL AND ECONOMY ANODIZED STEEL <= p_type_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_partkey, l_suppkey, l_extendedprice, l_discount], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: o_orderdate@2 >= 1995-01-01 AND o_orderdate@2 <= 1996-12-31 | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_custkey, o_orderdate], predicate=o_orderdate@4 >= 1995-01-01 AND o_orderdate@4 <= 1996-12-31, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1995-01-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 <= 1996-12-31, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:0..516172], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:516172..1032344], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1032344..1548516], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:1548516..2064688], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/1da733ea-6386-4f26-9b07-a7dd6acf0fb0/part-00000-9f0e4730-9d5b-4b75-aa41-94c520e8ae98.c000.snappy.parquet:2064688..2580860], ...]}, projection=[c_custkey, c_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_regionkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[r_regionkey@0 as r_regionkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: r_name@1 = AMERICA | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/95ed0c17-d141-4fcd-a5df-95144fc57106/part-00000-c58f7890-0077-4c26-8506-1b5a49759ef1.c000.snappy.parquet]]}, projection=[r_regionkey, r_name], predicate=r_name@1 = AMERICA, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= AMERICA AND AMERICA <= r_name_max@1, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q9_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q9_explain.snap new file mode 100644 index 0000000000..d0aac59197 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_q9_explain.snap @@ -0,0 +1,93 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q9" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: profit.nation ASC NULLS LAST, profit.o_year DESC NULLS FIRST | +| | Projection: profit.nation, profit.o_year, sum(profit.amount) AS sum_profit | +| | Aggregate: groupBy=[[profit.nation, profit.o_year]], aggr=[[sum(profit.amount)]] | +| | SubqueryAlias: profit | +| | Projection: nation.n_name AS nation, date_part(Utf8("YEAR"), orders.o_orderdate) AS o_year, lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) - partsupp.ps_supplycost * lineitem.l_quantity AS amount | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, partsupp.ps_supplycost, orders.o_orderdate | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | Projection: lineitem.l_orderkey, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, partsupp.ps_supplycost | +| | Inner Join: lineitem.l_suppkey = partsupp.ps_suppkey, lineitem.l_partkey = partsupp.ps_partkey | +| | Projection: lineitem.l_orderkey, lineitem.l_partkey, lineitem.l_suppkey, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey | +| | Inner Join: lineitem.l_suppkey = supplier.s_suppkey | +| | Projection: lineitem.l_orderkey, lineitem.l_partkey, lineitem.l_suppkey, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: part.p_partkey = lineitem.l_partkey | +| | Projection: part.p_partkey | +| | BytesProcessedNode | +| | Filter: part.p_name LIKE Utf8("%green%") | +| | TableScan: part projection=[p_partkey, p_name], partial_filters=[part.p_name LIKE Utf8("%green%")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_partkey, l_suppkey, l_quantity, l_extendedprice, l_discount] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_orderdate] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name] | +| physical_plan | SortPreservingMergeExec: [nation@0 ASC NULLS LAST, o_year@1 DESC] | +| | SortExec: expr=[nation@0 ASC NULLS LAST, o_year@1 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[nation@0 as nation, o_year@1 as o_year, sum(profit.amount)@2 as sum_profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[nation@0 as nation, o_year@1 as o_year], aggr=[sum(profit.amount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([nation@0, o_year@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[nation@0 as nation, o_year@1 as o_year], aggr=[sum(profit.amount)] | +| | ProjectionExec: expr=[n_name@5 as nation, date_part(YEAR, o_orderdate@4) as o_year, l_extendedprice@1 * (Some(1),20,0 - l_discount@2) - ps_supplycost@3 * l_quantity@0 as amount] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[l_quantity@0, l_extendedprice@1, l_discount@2, ps_supplycost@4, o_orderdate@5, n_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@0, o_orderkey@0)], projection=[l_quantity@1, l_extendedprice@2, l_discount@3, s_nationkey@4, ps_supplycost@5, o_orderdate@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@2, ps_suppkey@1), (l_partkey@1, ps_partkey@0)], projection=[l_orderkey@0, l_quantity@3, l_extendedprice@4, l_discount@5, s_nationkey@6, ps_supplycost@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@2, l_partkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@2, s_suppkey@0)], projection=[l_orderkey@0, l_partkey@1, l_suppkey@2, l_quantity@3, l_extendedprice@4, l_discount@5, s_nationkey@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, l_partkey@1)], projection=[l_orderkey@1, l_partkey@2, l_suppkey@3, l_quantity@4, l_extendedprice@5, l_discount@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[p_partkey@0 as p_partkey] | +| | BytesProcessedExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: p_name@1 LIKE %green% | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/e8201e13-619b-4f0d-9880-f5f023640f06/part-00000-3a5d88bd-e9b9-41b1-8d74-925ec5089e33.c000.snappy.parquet]]}, projection=[p_partkey, p_name], predicate=p_name@1 LIKE %green% | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_partkey, l_suppkey, l_quantity, l_extendedprice, l_discount], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/489b05dc-1d04-4de1-b15d-6bf6b1a98909/part-00000-697f0832-8045-4637-a858-eb0992e645f2.c000.snappy.parquet]]}, projection=[s_suppkey, s_nationkey], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@1, ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:0..1705770], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:1705770..3411540], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:3411540..5117310], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:5117310..6823080], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/cb978e1f-df12-4666-90f3-3ff59e671b12/part-00000-c99d7f3e-1052-4151-924f-5f0b802f4099.c000.snappy.parquet:6823080..8528850], ...]}, projection=[ps_partkey, ps_suppkey, ps_supplycost], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_orderdate], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/9446274f-e180-48f3-9733-0294a442e9a1/part-00000-41da8e30-6ef0-4c0f-b4d5-3f73fd7fe574.c000.snappy.parquet]]}, projection=[n_nationkey, n_name], predicate=true | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q1_explain.snap new file mode 100644 index 0000000000..a8b4fe3c64 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q1_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q1" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Aggregate: groupBy=[[]], aggr=[[max(lineitem.l_orderkey)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey] | +| physical_plan | AggregateExec: mode=Final, gby=[], aggr=[max(lineitem.l_orderkey)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[max(lineitem.l_orderkey)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey], predicate=true | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q2_explain.snap new file mode 100644 index 0000000000..97a08aaf2c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q2_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q2" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: lineitem.l_linenumber | +| | Inner Join: lineitem.l_linenumber = __scalar_sq_1.max(lineitem.l_linenumber) | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_linenumber] | +| | SubqueryAlias: __scalar_sq_1 | +| | Aggregate: groupBy=[[]], aggr=[[max(lineitem.l_linenumber)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_linenumber] | +| physical_plan | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_linenumber@0, max(lineitem.l_linenumber)@0)], projection=[l_linenumber@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_linenumber@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_linenumber], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([max(lineitem.l_linenumber)@0], 24), input_partitions=1 | +| | AggregateExec: mode=Final, gby=[], aggr=[max(lineitem.l_linenumber)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[max(lineitem.l_linenumber)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_linenumber], predicate=true | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q3_explain.snap new file mode 100644 index 0000000000..80bca5a34d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q3_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q3" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: lineitem.l_comment, lineitem.l_partkey | +| | Sort: lineitem.l_linenumber DESC NULLS FIRST, fetch=10 | +| | Projection: lineitem.l_comment, lineitem.l_partkey, lineitem.l_linenumber | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_linenumber, l_comment] | +| physical_plan | ProjectionExec: expr=[l_comment@0 as l_comment, l_partkey@1 as l_partkey] | +| | SortPreservingMergeExec: [l_linenumber@2 DESC], fetch=10 | +| | SortExec: TopK(fetch=10), expr=[l_linenumber@2 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_comment@2 as l_comment, l_partkey@0 as l_partkey, l_linenumber@1 as l_linenumber] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_partkey, l_linenumber, l_comment], predicate=true | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q4_explain.snap new file mode 100644 index 0000000000..85617a435d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q4_explain.snap @@ -0,0 +1,23 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q4" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lineitem.l_quantity DESC NULLS FIRST, fetch=10 | +| | Projection: avg(lineitem.l_tax), lineitem.l_linenumber, lineitem.l_quantity | +| | Aggregate: groupBy=[[lineitem.l_linenumber, lineitem.l_quantity]], aggr=[[avg(lineitem.l_tax)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_linenumber, l_quantity, l_tax] | +| physical_plan | SortPreservingMergeExec: [l_quantity@2 DESC], fetch=10 | +| | SortExec: TopK(fetch=10), expr=[l_quantity@2 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[avg(lineitem.l_tax)@2 as avg(lineitem.l_tax), l_linenumber@0 as l_linenumber, l_quantity@1 as l_quantity] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_linenumber@0 as l_linenumber, l_quantity@1 as l_quantity], aggr=[avg(lineitem.l_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_linenumber@0, l_quantity@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_linenumber@0 as l_linenumber, l_quantity@1 as l_quantity], aggr=[avg(lineitem.l_tax)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_linenumber, l_quantity, l_tax], predicate=true | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q5_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q5_explain.snap new file mode 100644 index 0000000000..2670fcf988 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q5_explain.snap @@ -0,0 +1,37 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q5" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: total_price DESC NULLS FIRST | +| | Projection: sum(o.o_totalprice) AS total_price, l.l_linestatus | +| | Aggregate: groupBy=[[l.l_linestatus]], aggr=[[sum(o.o_totalprice)]] | +| | Projection: o.o_totalprice, l.l_linestatus | +| | Inner Join: o.o_orderkey = l.l_orderkey | +| | SubqueryAlias: o | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_totalprice] | +| | SubqueryAlias: l | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_linestatus] | +| physical_plan | SortPreservingMergeExec: [total_price@0 DESC] | +| | SortExec: expr=[total_price@0 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[sum(o.o_totalprice)@1 as total_price, l_linestatus@0 as l_linestatus] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_linestatus@0 as l_linestatus], aggr=[sum(o.o_totalprice)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_linestatus@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_linestatus@1 as l_linestatus], aggr=[sum(o.o_totalprice)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@0, l_orderkey@0)], projection=[o_totalprice@1, l_linestatus@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey, o_totalprice], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:0..8462435], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:8462435..16924870], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:16924870..25387305], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:25387305..33849740], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/2de15727-286c-4119-8dc9-39a1060094fa/part-00000-593d72ce-bba2-4edf-851d-bdfd60cbcd3a.c000.snappy.parquet:33849740..42312175], ...]}, projection=[l_orderkey, l_linestatus], predicate=true | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q6_explain.snap new file mode 100644 index 0000000000..b1b7c1ffe6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q6_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q6" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | SubqueryAlias: c | +| | Projection: orders.o_orderkey + Int64(1) AS key | +| | Limit: skip=0, fetch=10 | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey], fetch=10 | +| physical_plan | ProjectionExec: expr=[o_orderkey@0 + 1 as key] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | GlobalLimitExec: skip=0, fetch=10 | +| | CoalescePartitionsExec | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey], limit=10, predicate=true | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q7_explain.snap new file mode 100644 index 0000000000..691d7f23c9 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__databricks[delta_lake]-federated_tpch_simple_q7_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q7" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | SubqueryAlias: c | +| | Projection: orders.o_orderkey AS key | +| | Limit: skip=0, fetch=10 | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey], fetch=10 | +| physical_plan | ProjectionExec: expr=[o_orderkey@0 as key] | +| | GlobalLimitExec: skip=0, fetch=10 | +| | CoalescePartitionsExec | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:0..2201928], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:2201928..4403856], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:4403856..6605784], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:6605784..8807712], [unity-catalog/8429759719709712/tpch/__unitystorage/schemas/03ced2b7-e783-45f2-a068-2087112c2098/tables/c064f4c3-87c6-43d2-b92d-ab0c8151d7e3/part-00000-7222ac13-fe93-45a6-b6e5-113626fb303f.c000.snappy.parquet:8807712..11009640], ...]}, projection=[o_orderkey], limit=10, predicate=true | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q10_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q10_explain.snap new file mode 100644 index 0000000000..0acb5b9bf0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q10_explain.snap @@ -0,0 +1,60 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q10" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: revenue DESC NULLS FIRST, fetch=20 | +| | Projection: customer.c_custkey, customer.c_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue, customer.c_acctbal, nation.n_name, customer.c_address, customer.c_phone, customer.c_comment | +| | Aggregate: groupBy=[[customer.c_custkey, customer.c_name, customer.c_acctbal, customer.c_phone, nation.n_name, customer.c_address, customer.c_comment]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_phone, customer.c_acctbal, customer.c_comment, lineitem.l_extendedprice, lineitem.l_discount, nation.n_name | +| | Inner Join: customer.c_nationkey = nation.n_nationkey | +| | Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_nationkey, customer.c_phone, customer.c_acctbal, customer.c_comment, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: customer.c_custkey, customer.c_name, customer.c_address, customer.c_nationkey, customer.c_phone, customer.c_acctbal, customer.c_comment, orders.o_orderkey | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey], full_filters=[orders.o_orderdate >= Date32("1993-10-01"), orders.o_orderdate < Date32("1994-01-01")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount], full_filters=[lineitem.l_returnflag = LargeUtf8("R")] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name] | +| physical_plan | SortPreservingMergeExec: [revenue@2 DESC], fetch=20 | +| | SortExec: TopK(fetch=20), expr=[revenue@2 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_custkey@0 as c_custkey, c_name@1 as c_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@7 as revenue, c_acctbal@2 as c_acctbal, n_name@4 as n_name, c_address@5 as c_address, c_phone@3 as c_phone, c_comment@6 as c_comment] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_custkey@0 as c_custkey, c_name@1 as c_name, c_acctbal@2 as c_acctbal, c_phone@3 as c_phone, n_name@4 as n_name, c_address@5 as c_address, c_comment@6 as c_comment], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0, c_name@1, c_acctbal@2, c_phone@3, n_name@4, c_address@5, c_comment@6], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_custkey@0 as c_custkey, c_name@1 as c_name, c_acctbal@4 as c_acctbal, c_phone@3 as c_phone, n_name@8 as n_name, c_address@2 as c_address, c_comment@5 as c_comment], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_nationkey@3, n_nationkey@0)], projection=[c_custkey@0, c_name@1, c_address@2, c_phone@4, c_acctbal@5, c_comment@6, l_extendedprice@7, l_discount@8, n_name@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@7, l_orderkey@0)], projection=[c_custkey@0, c_name@1, c_address@2, c_nationkey@3, c_phone@4, c_acctbal@5, c_comment@6, l_extendedprice@9, l_discount@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_custkey@0, c_name@1, c_address@2, c_nationkey@3, c_phone@4, c_acctbal@5, c_comment@6, o_orderkey@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_custkey], predicate=o_orderdate@4 >= 1993-10-01 AND o_orderdate@4 < 1994-01-01, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1993-10-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 < 1994-01-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_extendedprice, l_discount], predicate=l_returnflag@8 = R, pruning_predicate=l_returnflag_null_count@2 != l_returnflag_row_count@3 AND l_returnflag_min@0 <= R AND R <= l_returnflag_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_name] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q11_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q11_explain.snap new file mode 100644 index 0000000000..dea6110b48 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q11_explain.snap @@ -0,0 +1,88 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q11" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: value DESC NULLS FIRST | +| | Projection: partsupp.ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty) AS value | +| | Inner Join: Filter: CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty) AS Decimal128(38, 15)) > __scalar_sq_1.sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001) | +| | Aggregate: groupBy=[[partsupp.ps_partkey]], aggr=[[sum(partsupp.ps_supplycost * CAST(partsupp.ps_availqty AS Decimal128(10, 0)))]] | +| | Projection: partsupp.ps_partkey, partsupp.ps_availqty, partsupp.ps_supplycost | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: partsupp.ps_partkey, partsupp.ps_availqty, partsupp.ps_supplycost, supplier.s_nationkey | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey], full_filters=[nation.n_name = LargeUtf8("GERMANY")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty) AS Float64) * Float64(0.0001) AS Decimal128(38, 15)) | +| | Aggregate: groupBy=[[]], aggr=[[sum(partsupp.ps_supplycost * CAST(partsupp.ps_availqty AS Decimal128(10, 0)))]] | +| | Projection: partsupp.ps_availqty, partsupp.ps_supplycost | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: partsupp.ps_availqty, partsupp.ps_supplycost, supplier.s_nationkey | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_suppkey, ps_availqty, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey], full_filters=[nation.n_name = LargeUtf8("GERMANY")] | +| physical_plan | SortExec: expr=[value@1 DESC], preserve_partitioning=[false] | +| | ProjectionExec: expr=[ps_partkey@0 as ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1 as value] | +| | NestedLoopJoinExec: join_type=Inner, filter=CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Decimal128(38, 15)) > sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)@1, projection=[ps_partkey@0, sum(partsupp.ps_supplycost * partsupp.ps_availqty)@1] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[ps_partkey@0, ps_availqty@1, ps_supplycost@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@1, s_suppkey@0)], projection=[ps_partkey@0, ps_availqty@2, ps_supplycost@3, s_nationkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/partsupp.parquet:0..1737389], [/data/partsupp.parquet:1737389..3474778], [/data/partsupp.parquet:3474778..5212167], [/data/partsupp.parquet:5212167..6949556], [/data/partsupp.parquet:6949556..8686945], ...]}, projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey], predicate=n_name@1 = GERMANY, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(CAST(sum(partsupp.ps_supplycost * partsupp.ps_availqty)@0 AS Float64) * 0.0001 AS Decimal128(38, 15)) as sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001)] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(partsupp.ps_supplycost * partsupp.ps_availqty)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[ps_availqty@0, ps_supplycost@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@0, s_suppkey@0)], projection=[ps_availqty@1, ps_supplycost@2, s_nationkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/partsupp.parquet:0..1737389], [/data/partsupp.parquet:1737389..3474778], [/data/partsupp.parquet:3474778..5212167], [/data/partsupp.parquet:5212167..6949556], [/data/partsupp.parquet:6949556..8686945], ...]}, projection=[ps_suppkey, ps_availqty, ps_supplycost] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey], predicate=n_name@1 = GERMANY, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q12_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q12_explain.snap new file mode 100644 index 0000000000..07b42fc178 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q12_explain.snap @@ -0,0 +1,35 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q12" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lineitem.l_shipmode ASC NULLS LAST | +| | Projection: lineitem.l_shipmode, sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS high_line_count, sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS low_line_count | +| | Aggregate: groupBy=[[lineitem.l_shipmode]], aggr=[[sum(CASE WHEN orders.o_orderpriority = LargeUtf8("1-URGENT") OR orders.o_orderpriority = LargeUtf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN orders.o_orderpriority != LargeUtf8("1-URGENT") AND orders.o_orderpriority != LargeUtf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)]] | +| | Projection: lineitem.l_shipmode, orders.o_orderpriority | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_shipmode], full_filters=[lineitem.l_shipmode = LargeUtf8("MAIL") OR lineitem.l_shipmode = LargeUtf8("SHIP"), lineitem.l_receiptdate > lineitem.l_commitdate, lineitem.l_shipdate < lineitem.l_commitdate, lineitem.l_receiptdate >= Date32("1994-01-01"), lineitem.l_receiptdate < Date32("1995-01-01")] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_orderpriority] | +| physical_plan | SortPreservingMergeExec: [l_shipmode@0 ASC NULLS LAST] | +| | SortExec: expr=[l_shipmode@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_shipmode@0 as l_shipmode, sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)@1 as high_line_count, sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)@2 as low_line_count] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_shipmode@0 as l_shipmode], aggr=[sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_shipmode@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_shipmode@0 as l_shipmode], aggr=[sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@0, o_orderkey@0)], projection=[l_shipmode@1, o_orderpriority@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_shipmode], predicate=(l_shipmode@14 = MAIL OR l_shipmode@14 = SHIP) AND l_receiptdate@12 > l_commitdate@11 AND l_shipdate@10 < l_commitdate@11 AND l_receiptdate@12 >= 1994-01-01 AND l_receiptdate@12 < 1995-01-01, pruning_predicate=(l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= MAIL AND MAIL <= l_shipmode_max@1 OR l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= SHIP AND SHIP <= l_shipmode_max@1) AND l_receiptdate_null_count@5 != l_receiptdate_row_count@6 AND l_receiptdate_max@4 >= 1994-01-01 AND l_receiptdate_null_count@5 != l_receiptdate_row_count@6 AND l_receiptdate_min@7 < 1995-01-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_orderpriority] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q13_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q13_explain.snap new file mode 100644 index 0000000000..cdfbffbe07 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q13_explain.snap @@ -0,0 +1,40 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q13" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: custdist DESC NULLS FIRST, c_orders.c_count DESC NULLS FIRST | +| | Projection: c_orders.c_count, count(*) AS custdist | +| | Aggregate: groupBy=[[c_orders.c_count]], aggr=[[count(Int64(1)) AS count(*)]] | +| | SubqueryAlias: c_orders | +| | Projection: count(orders.o_orderkey) AS c_count | +| | Aggregate: groupBy=[[customer.c_custkey]], aggr=[[count(orders.o_orderkey)]] | +| | Projection: customer.c_custkey, orders.o_orderkey | +| | Left Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey], full_filters=[orders.o_comment NOT LIKE LargeUtf8("%special%requests%")] | +| physical_plan | SortPreservingMergeExec: [custdist@1 DESC, c_count@0 DESC] | +| | SortExec: expr=[custdist@1 DESC, c_count@0 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_count@0 as c_count, count(*)@1 as custdist] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_count@0 as c_count], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_count@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_count@0 as c_count], aggr=[count(*)] | +| | ProjectionExec: expr=[count(orders.o_orderkey)@1 as c_count] | +| | AggregateExec: mode=SinglePartitioned, gby=[c_custkey@0 as c_custkey], aggr=[count(orders.o_orderkey)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(c_custkey@0, o_custkey@1)], projection=[c_custkey@0, o_orderkey@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_custkey], predicate=o_comment@8 NOT LIKE %special%requests% | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q14_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q14_explain.snap new file mode 100644 index 0000000000..b418704036 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q14_explain.snap @@ -0,0 +1,33 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q14" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: Float64(100) * CAST(sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END) AS Float64) / CAST(sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS Float64) AS promo_revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(CASE WHEN part.p_type LIKE LargeUtf8("PROMO%") THEN __common_expr_1 ELSE Decimal128(Some(0),38,4) END) AS sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END), sum(__common_expr_1) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS __common_expr_1, part.p_type | +| | Inner Join: lineitem.l_partkey = part.p_partkey | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_extendedprice, l_discount], full_filters=[lineitem.l_shipdate >= Date32("1995-09-01"), lineitem.l_shipdate < Date32("1995-10-01")] | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey, p_type] | +| physical_plan | ProjectionExec: expr=[100 * CAST(sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END)@0 AS Float64) / CAST(sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 AS Float64) as promo_revenue] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | ProjectionExec: expr=[l_extendedprice@0 * (Some(1),20,0 - l_discount@1) as __common_expr_1, p_type@2 as p_type] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_partkey@0, p_partkey@0)], projection=[l_extendedprice@1, l_discount@2, p_type@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_partkey, l_extendedprice, l_discount], predicate=l_shipdate@10 >= 1995-09-01 AND l_shipdate@10 < 1995-10-01, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1995-09-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 < 1995-10-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey, p_type] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q16_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q16_explain.snap new file mode 100644 index 0000000000..6f6c69df0b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q16_explain.snap @@ -0,0 +1,54 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q16" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: supplier_cnt DESC NULLS FIRST, part.p_brand ASC NULLS LAST, part.p_type ASC NULLS LAST, part.p_size ASC NULLS LAST | +| | Projection: part.p_brand, part.p_type, part.p_size, count(alias1) AS supplier_cnt | +| | Aggregate: groupBy=[[part.p_brand, part.p_type, part.p_size]], aggr=[[count(alias1)]] | +| | Aggregate: groupBy=[[part.p_brand, part.p_type, part.p_size, partsupp.ps_suppkey AS alias1]], aggr=[[]] | +| | LeftAnti Join: partsupp.ps_suppkey = __correlated_sq_1.s_suppkey | +| | Projection: partsupp.ps_suppkey, part.p_brand, part.p_type, part.p_size | +| | Inner Join: partsupp.ps_partkey = part.p_partkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey] | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey, p_brand, p_type, p_size], full_filters=[part.p_brand != LargeUtf8("Brand#45"), part.p_type NOT LIKE LargeUtf8("MEDIUM POLISHED%"), part.p_size IN ([Int32(49), Int32(14), Int32(23), Int32(45), Int32(19), Int32(3), Int32(36), Int32(9)])] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey], full_filters=[supplier.s_comment LIKE LargeUtf8("%Customer%Complaints%")] | +| physical_plan | SortPreservingMergeExec: [supplier_cnt@3 DESC, p_brand@0 ASC NULLS LAST, p_type@1 ASC NULLS LAST, p_size@2 ASC NULLS LAST] | +| | SortExec: expr=[supplier_cnt@3 DESC, p_brand@0 ASC NULLS LAST, p_type@1 ASC NULLS LAST, p_size@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size, count(alias1)@3 as supplier_cnt] | +| | AggregateExec: mode=FinalPartitioned, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size], aggr=[count(alias1)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_brand@0, p_type@1, p_size@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size], aggr=[count(alias1)] | +| | AggregateExec: mode=FinalPartitioned, gby=[p_brand@0 as p_brand, p_type@1 as p_type, p_size@2 as p_size, alias1@3 as alias1], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_brand@0, p_type@1, p_size@2, alias1@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[p_brand@1 as p_brand, p_type@2 as p_type, p_size@3 as p_size, ps_suppkey@0 as alias1], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(ps_suppkey@0, s_suppkey@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_partkey@0, p_partkey@0)], projection=[ps_suppkey@1, p_brand@3, p_type@4, p_size@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/partsupp.parquet:0..1737389], [/data/partsupp.parquet:1737389..3474778], [/data/partsupp.parquet:3474778..5212167], [/data/partsupp.parquet:5212167..6949556], [/data/partsupp.parquet:6949556..8686945], ...]}, projection=[ps_partkey, ps_suppkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey, p_brand, p_type, p_size], predicate=p_brand@3 != Brand#45 AND p_type@4 NOT LIKE MEDIUM POLISHED% AND Use p_size@5 IN (SET) ([Literal { value: Int32(49) }, Literal { value: Int32(14) }, Literal { value: Int32(23) }, Literal { value: Int32(45) }, Literal { value: Int32(19) }, Literal { value: Int32(3) }, Literal { value: Int32(36) }, Literal { value: Int32(9) }]), pruning_predicate=p_brand_null_count@2 != p_brand_row_count@3 AND (p_brand_min@0 != Brand#45 OR Brand#45 != p_brand_max@1) AND (p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 49 AND 49 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 14 AND 14 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 23 AND 23 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 45 AND 45 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 19 AND 19 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 3 AND 3 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 36 AND 36 <= p_size_max@5 OR p_size_null_count@6 != p_size_row_count@7 AND p_size_min@4 <= 9 AND 9 <= p_size_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey], predicate=s_comment@6 LIKE %Customer%Complaints% | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q17_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q17_explain.snap new file mode 100644 index 0000000000..9b002a97ac --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q17_explain.snap @@ -0,0 +1,48 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q17" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: CAST(sum(lineitem.l_extendedprice) AS Float64) / Float64(7) AS avg_yearly | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice)]] | +| | Projection: lineitem.l_extendedprice | +| | Inner Join: part.p_partkey = __scalar_sq_1.l_partkey Filter: CAST(lineitem.l_quantity AS Decimal128(30, 15)) < __scalar_sq_1.Float64(0.2) * avg(lineitem.l_quantity) | +| | Projection: lineitem.l_quantity, lineitem.l_extendedprice, part.p_partkey | +| | Inner Join: lineitem.l_partkey = part.p_partkey | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice] | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey], full_filters=[part.p_brand = LargeUtf8("Brand#23"), part.p_container = LargeUtf8("MED BOX")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(Float64(0.2) * CAST(avg(lineitem.l_quantity) AS Float64) AS Decimal128(30, 15)), lineitem.l_partkey | +| | Aggregate: groupBy=[[lineitem.l_partkey]], aggr=[[avg(lineitem.l_quantity)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_quantity] | +| physical_plan | ProjectionExec: expr=[CAST(sum(lineitem.l_extendedprice)@0 AS Float64) / 7 as avg_yearly] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(lineitem.l_extendedprice)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(lineitem.l_extendedprice)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@2, l_partkey@1)], filter=CAST(l_quantity@0 AS Decimal128(30, 15)) < Float64(0.2) * avg(lineitem.l_quantity)@1, projection=[l_extendedprice@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_partkey@0, p_partkey@0)], projection=[l_quantity@1, l_extendedprice@2, p_partkey@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_partkey, l_quantity, l_extendedprice] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey], predicate=p_brand@3 = Brand#23 AND p_container@6 = MED BOX, pruning_predicate=p_brand_null_count@2 != p_brand_row_count@3 AND p_brand_min@0 <= Brand#23 AND Brand#23 <= p_brand_max@1 AND p_container_null_count@6 != p_container_row_count@7 AND p_container_min@4 <= MED BOX AND MED BOX <= p_container_max@5, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(0.2 * CAST(avg(lineitem.l_quantity)@1 AS Float64) AS Decimal128(30, 15)) as Float64(0.2) * avg(lineitem.l_quantity), l_partkey@0 as l_partkey] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_partkey@0 as l_partkey], aggr=[avg(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_partkey@0 as l_partkey], aggr=[avg(lineitem.l_quantity)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_partkey, l_quantity] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q18_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q18_explain.snap new file mode 100644 index 0000000000..0724f5fb78 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q18_explain.snap @@ -0,0 +1,62 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q18" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: orders.o_totalprice DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST | +| | Aggregate: groupBy=[[customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice]], aggr=[[sum(lineitem.l_quantity)]] | +| | LeftSemi Join: orders.o_orderkey = __correlated_sq_1.l_orderkey | +| | Projection: customer.c_custkey, customer.c_name, orders.o_orderkey, orders.o_totalprice, orders.o_orderdate, lineitem.l_quantity | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: customer.c_custkey, customer.c_name, orders.o_orderkey, orders.o_totalprice, orders.o_orderdate | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_name] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_quantity] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: lineitem.l_orderkey | +| | Filter: sum(lineitem.l_quantity) > Decimal128(Some(30000),25,2) | +| | Aggregate: groupBy=[[lineitem.l_orderkey]], aggr=[[sum(lineitem.l_quantity)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_quantity] | +| physical_plan | SortPreservingMergeExec: [o_totalprice@4 DESC, o_orderdate@3 ASC NULLS LAST] | +| | SortExec: expr=[o_totalprice@4 DESC, o_orderdate@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_name@0 as c_name, c_custkey@1 as c_custkey, o_orderkey@2 as o_orderkey, o_orderdate@3 as o_orderdate, o_totalprice@4 as o_totalprice], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_name@0, c_custkey@1, o_orderkey@2, o_orderdate@3, o_totalprice@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_name@1 as c_name, c_custkey@0 as c_custkey, o_orderkey@2 as o_orderkey, o_orderdate@4 as o_orderdate, o_totalprice@3 as o_totalprice], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(o_orderkey@2, l_orderkey@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@2, l_orderkey@0)], projection=[c_custkey@0, c_name@1, o_orderkey@2, o_totalprice@3, o_orderdate@4, l_quantity@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_custkey@0, c_name@1, o_orderkey@2, o_totalprice@4, o_orderdate@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey, c_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(lineitem.l_quantity)@1 > Some(30000),25,2, projection=[l_orderkey@0] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_orderkey@0 as l_orderkey], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_orderkey@0 as l_orderkey], aggr=[sum(lineitem.l_quantity)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_quantity] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q19_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q19_explain.snap new file mode 100644 index 0000000000..ba585466eb --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q19_explain.snap @@ -0,0 +1,32 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q19" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: lineitem.l_partkey = part.p_partkey Filter: part.p_brand = LargeUtf8("Brand#12") AND part.p_container IN ([LargeUtf8("SM CASE"), LargeUtf8("SM BOX"), LargeUtf8("SM PACK"), LargeUtf8("SM PKG")]) AND lineitem.l_quantity >= Decimal128(Some(100),15,2) AND lineitem.l_quantity <= Decimal128(Some(1100),15,2) AND part.p_size <= Int32(5) OR part.p_brand = LargeUtf8("Brand#23") AND part.p_container IN ([LargeUtf8("MED BAG"), LargeUtf8("MED BOX"), LargeUtf8("MED PKG"), LargeUtf8("MED PACK")]) AND lineitem.l_quantity >= Decimal128(Some(1000),15,2) AND lineitem.l_quantity <= Decimal128(Some(2000),15,2) AND part.p_size <= Int32(10) OR part.p_brand = LargeUtf8("Brand#34") AND part.p_container IN ([LargeUtf8("LG CASE"), LargeUtf8("LG BOX"), LargeUtf8("LG PACK"), LargeUtf8("LG PKG")]) AND lineitem.l_quantity >= Decimal128(Some(2000),15,2) AND lineitem.l_quantity <= Decimal128(Some(3000),15,2) AND part.p_size <= Int32(15) | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice, l_discount], full_filters=[lineitem.l_shipmode = LargeUtf8("AIR") OR lineitem.l_shipmode = LargeUtf8("AIR REG"), lineitem.l_shipinstruct = LargeUtf8("DELIVER IN PERSON"), lineitem.l_quantity >= Decimal128(Some(100),15,2) AND lineitem.l_quantity <= Decimal128(Some(1100),15,2) OR lineitem.l_quantity >= Decimal128(Some(1000),15,2) AND lineitem.l_quantity <= Decimal128(Some(2000),15,2) OR lineitem.l_quantity >= Decimal128(Some(2000),15,2) AND lineitem.l_quantity <= Decimal128(Some(3000),15,2)] | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey, p_brand, p_size, p_container], full_filters=[part.p_size >= Int32(1), part.p_brand = LargeUtf8("Brand#12") AND part.p_container IN ([LargeUtf8("SM CASE"), LargeUtf8("SM BOX"), LargeUtf8("SM PACK"), LargeUtf8("SM PKG")]) AND part.p_size <= Int32(5) OR part.p_brand = LargeUtf8("Brand#23") AND part.p_container IN ([LargeUtf8("MED BAG"), LargeUtf8("MED BOX"), LargeUtf8("MED PKG"), LargeUtf8("MED PACK")]) AND part.p_size <= Int32(10) OR part.p_brand = LargeUtf8("Brand#34") AND part.p_container IN ([LargeUtf8("LG CASE"), LargeUtf8("LG BOX"), LargeUtf8("LG PACK"), LargeUtf8("LG PKG")]) AND part.p_size <= Int32(15)] | +| physical_plan | ProjectionExec: expr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@0 as revenue] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_partkey@0, p_partkey@0)], filter=p_brand@1 = Brand#12 AND Use p_container@3 IN (SET) ([Literal { value: LargeUtf8("SM CASE") }, Literal { value: LargeUtf8("SM BOX") }, Literal { value: LargeUtf8("SM PACK") }, Literal { value: LargeUtf8("SM PKG") }]) AND l_quantity@0 >= Some(100),15,2 AND l_quantity@0 <= Some(1100),15,2 AND p_size@2 <= 5 OR p_brand@1 = Brand#23 AND Use p_container@3 IN (SET) ([Literal { value: LargeUtf8("MED BAG") }, Literal { value: LargeUtf8("MED BOX") }, Literal { value: LargeUtf8("MED PKG") }, Literal { value: LargeUtf8("MED PACK") }]) AND l_quantity@0 >= Some(1000),15,2 AND l_quantity@0 <= Some(2000),15,2 AND p_size@2 <= 10 OR p_brand@1 = Brand#34 AND Use p_container@3 IN (SET) ([Literal { value: LargeUtf8("LG CASE") }, Literal { value: LargeUtf8("LG BOX") }, Literal { value: LargeUtf8("LG PACK") }, Literal { value: LargeUtf8("LG PKG") }]) AND l_quantity@0 >= Some(2000),15,2 AND l_quantity@0 <= Some(3000),15,2 AND p_size@2 <= 15, projection=[l_extendedprice@2, l_discount@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_partkey, l_quantity, l_extendedprice, l_discount], predicate=(l_shipmode@14 = AIR OR l_shipmode@14 = AIR REG) AND l_shipinstruct@13 = DELIVER IN PERSON AND (l_quantity@4 >= Some(100),15,2 AND l_quantity@4 <= Some(1100),15,2 OR l_quantity@4 >= Some(1000),15,2 AND l_quantity@4 <= Some(2000),15,2 OR l_quantity@4 >= Some(2000),15,2 AND l_quantity@4 <= Some(3000),15,2), pruning_predicate=(l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= AIR AND AIR <= l_shipmode_max@1 OR l_shipmode_null_count@2 != l_shipmode_row_count@3 AND l_shipmode_min@0 <= AIR REG AND AIR REG <= l_shipmode_max@1) AND l_shipinstruct_null_count@6 != l_shipinstruct_row_count@7 AND l_shipinstruct_min@4 <= DELIVER IN PERSON AND DELIVER IN PERSON <= l_shipinstruct_max@5 AND (l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_max@8 >= Some(100),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@11 <= Some(1100),15,2 OR l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_max@8 >= Some(1000),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@11 <= Some(2000),15,2 OR l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_max@8 >= Some(2000),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@11 <= Some(3000),15,2), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey, p_brand, p_size, p_container], predicate=p_size@5 >= 1 AND (p_brand@3 = Brand#12 AND Use p_container@6 IN (SET) ([Literal { value: LargeUtf8("SM CASE") }, Literal { value: LargeUtf8("SM BOX") }, Literal { value: LargeUtf8("SM PACK") }, Literal { value: LargeUtf8("SM PKG") }]) AND p_size@5 <= 5 OR p_brand@3 = Brand#23 AND Use p_container@6 IN (SET) ([Literal { value: LargeUtf8("MED BAG") }, Literal { value: LargeUtf8("MED BOX") }, Literal { value: LargeUtf8("MED PKG") }, Literal { value: LargeUtf8("MED PACK") }]) AND p_size@5 <= 10 OR p_brand@3 = Brand#34 AND Use p_container@6 IN (SET) ([Literal { value: LargeUtf8("LG CASE") }, Literal { value: LargeUtf8("LG BOX") }, Literal { value: LargeUtf8("LG PACK") }, Literal { value: LargeUtf8("LG PKG") }]) AND p_size@5 <= 15), pruning_predicate=p_size_null_count@1 != p_size_row_count@2 AND p_size_max@0 >= 1 AND (p_brand_null_count@5 != p_brand_row_count@6 AND p_brand_min@3 <= Brand#12 AND Brand#12 <= p_brand_max@4 AND (p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM CASE AND SM CASE <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM BOX AND SM BOX <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM PACK AND SM PACK <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= SM PKG AND SM PKG <= p_container_max@8) AND p_size_null_count@1 != p_size_row_count@2 AND p_size_min@11 <= 5 OR p_brand_null_count@5 != p_brand_row_count@6 AND p_brand_min@3 <= Brand#23 AND Brand#23 <= p_brand_max@4 AND (p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED BAG AND MED BAG <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED BOX AND MED BOX <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED PKG AND MED PKG <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= MED PACK AND MED PACK <= p_container_max@8) AND p_size_null_count@1 != p_size_row_count@2 AND p_size_min@11 <= 10 OR p_brand_null_count@5 != p_brand_row_count@6 AND p_brand_min@3 <= Brand#34 AND Brand#34 <= p_brand_max@4 AND (p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG CASE AND LG CASE <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG BOX AND LG BOX <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG PACK AND LG PACK <= p_container_max@8 OR p_container_null_count@9 != p_container_row_count@10 AND p_container_min@7 <= LG PKG AND LG PKG <= p_container_max@8) AND p_size_null_count@1 != p_size_row_count@2 AND p_size_min@11 <= 15), required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q1_explain.snap new file mode 100644 index 0000000000..dfd436043c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q1_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q1" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lineitem.l_returnflag ASC NULLS LAST, lineitem.l_linestatus ASC NULLS LAST | +| | Projection: lineitem.l_returnflag, lineitem.l_linestatus, sum(lineitem.l_quantity) AS sum_qty, sum(lineitem.l_extendedprice) AS sum_base_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS sum_disc_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax) AS sum_charge, avg(lineitem.l_quantity) AS avg_qty, avg(lineitem.l_extendedprice) AS avg_price, avg(lineitem.l_discount) AS avg_disc, count(*) AS count_order | +| | Aggregate: groupBy=[[lineitem.l_returnflag, lineitem.l_linestatus]], aggr=[[sum(lineitem.l_quantity), sum(lineitem.l_extendedprice), sum(__common_expr_1) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount), sum(__common_expr_1 * (Decimal128(Some(1),20,0) + lineitem.l_tax)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax), avg(lineitem.l_quantity), avg(lineitem.l_extendedprice), avg(lineitem.l_discount), count(Int64(1)) AS count(*)]] | +| | Projection: lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS __common_expr_1, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_tax, lineitem.l_returnflag, lineitem.l_linestatus | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus], full_filters=[lineitem.l_shipdate <= Date32("1998-09-02")] | +| physical_plan | SortPreservingMergeExec: [l_returnflag@0 ASC NULLS LAST, l_linestatus@1 ASC NULLS LAST] | +| | SortExec: expr=[l_returnflag@0 ASC NULLS LAST, l_linestatus@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_returnflag@0 as l_returnflag, l_linestatus@1 as l_linestatus, sum(lineitem.l_quantity)@2 as sum_qty, sum(lineitem.l_extendedprice)@3 as sum_base_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@4 as sum_disc_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax)@5 as sum_charge, avg(lineitem.l_quantity)@6 as avg_qty, avg(lineitem.l_extendedprice)@7 as avg_price, avg(lineitem.l_discount)@8 as avg_disc, count(*)@9 as count_order] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_returnflag@0 as l_returnflag, l_linestatus@1 as l_linestatus], aggr=[sum(lineitem.l_quantity), sum(lineitem.l_extendedprice), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax), avg(lineitem.l_quantity), avg(lineitem.l_extendedprice), avg(lineitem.l_discount), count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_returnflag@0, l_linestatus@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_returnflag@5 as l_returnflag, l_linestatus@6 as l_linestatus], aggr=[sum(lineitem.l_quantity), sum(lineitem.l_extendedprice), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount), sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax), avg(lineitem.l_quantity), avg(lineitem.l_extendedprice), avg(lineitem.l_discount), count(*)] | +| | ProjectionExec: expr=[l_extendedprice@1 * (Some(1),20,0 - l_discount@2) as __common_expr_1, l_quantity@0 as l_quantity, l_extendedprice@1 as l_extendedprice, l_discount@2 as l_discount, l_tax@3 as l_tax, l_returnflag@4 as l_returnflag, l_linestatus@5 as l_linestatus] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus], predicate=l_shipdate@10 <= 1998-09-02, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@0 <= 1998-09-02, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q20_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q20_explain.snap new file mode 100644 index 0000000000..fe637c184c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q20_explain.snap @@ -0,0 +1,74 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q20" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: supplier.s_name ASC NULLS LAST | +| | Projection: supplier.s_name, supplier.s_address | +| | LeftSemi Join: supplier.s_suppkey = __correlated_sq_2.ps_suppkey | +| | Projection: supplier.s_suppkey, supplier.s_name, supplier.s_address | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_name, s_address, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey], full_filters=[nation.n_name = LargeUtf8("CANADA")] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: partsupp.ps_suppkey | +| | Inner Join: partsupp.ps_partkey = __scalar_sq_3.l_partkey, partsupp.ps_suppkey = __scalar_sq_3.l_suppkey Filter: CAST(partsupp.ps_availqty AS Float64) > __scalar_sq_3.Float64(0.5) * sum(lineitem.l_quantity) | +| | LeftSemi Join: partsupp.ps_partkey = __correlated_sq_1.p_partkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey], full_filters=[part.p_name LIKE LargeUtf8("forest%")] | +| | SubqueryAlias: __scalar_sq_3 | +| | Projection: Float64(0.5) * CAST(sum(lineitem.l_quantity) AS Float64), lineitem.l_partkey, lineitem.l_suppkey | +| | Aggregate: groupBy=[[lineitem.l_partkey, lineitem.l_suppkey]], aggr=[[sum(lineitem.l_quantity)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_suppkey, l_quantity], full_filters=[lineitem.l_shipdate >= Date32("1994-01-01"), lineitem.l_shipdate < Date32("1995-01-01")] | +| physical_plan | SortPreservingMergeExec: [s_name@0 ASC NULLS LAST] | +| | SortExec: expr=[s_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(s_suppkey@0, ps_suppkey@0)], projection=[s_name@1, s_address@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[s_suppkey@0, s_name@1, s_address@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@3], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_name, s_address, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey], predicate=n_name@1 = CANADA, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= CANADA AND CANADA <= n_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_partkey@0, l_partkey@1), (ps_suppkey@1, l_suppkey@2)], filter=CAST(ps_availqty@0 AS Float64) > Float64(0.5) * sum(lineitem.l_quantity)@1, projection=[ps_suppkey@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0, ps_suppkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ps_partkey@0, p_partkey@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/partsupp.parquet:0..1737389], [/data/partsupp.parquet:1737389..3474778], [/data/partsupp.parquet:3474778..5212167], [/data/partsupp.parquet:5212167..6949556], [/data/partsupp.parquet:6949556..8686945], ...]}, projection=[ps_partkey, ps_suppkey, ps_availqty] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey], predicate=p_name@1 LIKE forest%, pruning_predicate=p_name_null_count@2 != p_name_row_count@3 AND p_name_min@0 <= foresu AND forest <= p_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[0.5 * CAST(sum(lineitem.l_quantity)@2 AS Float64) as Float64(0.5) * sum(lineitem.l_quantity), l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey], aggr=[sum(lineitem.l_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@0, l_suppkey@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_partkey@0 as l_partkey, l_suppkey@1 as l_suppkey], aggr=[sum(lineitem.l_quantity)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_partkey, l_suppkey, l_quantity], predicate=l_shipdate@10 >= 1994-01-01 AND l_shipdate@10 < 1995-01-01, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1994-01-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 < 1995-01-01, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q21_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q21_explain.snap new file mode 100644 index 0000000000..0f0d39f02b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q21_explain.snap @@ -0,0 +1,87 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q21" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: numwait DESC NULLS FIRST, supplier.s_name ASC NULLS LAST, fetch=100 | +| | Projection: supplier.s_name, count(*) AS numwait | +| | Aggregate: groupBy=[[supplier.s_name]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: supplier.s_name | +| | LeftAnti Join: l1.l_orderkey = __correlated_sq_2.l_orderkey Filter: __correlated_sq_2.l_suppkey != l1.l_suppkey | +| | LeftSemi Join: l1.l_orderkey = __correlated_sq_1.l_orderkey Filter: __correlated_sq_1.l_suppkey != l1.l_suppkey | +| | Projection: supplier.s_name, l1.l_orderkey, l1.l_suppkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: supplier.s_name, supplier.s_nationkey, l1.l_orderkey, l1.l_suppkey | +| | Inner Join: l1.l_orderkey = orders.o_orderkey | +| | Projection: supplier.s_name, supplier.s_nationkey, l1.l_orderkey, l1.l_suppkey | +| | Inner Join: supplier.s_suppkey = l1.l_suppkey | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_name, s_nationkey] | +| | SubqueryAlias: l1 | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey], full_filters=[lineitem.l_receiptdate > lineitem.l_commitdate] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey], full_filters=[orders.o_orderstatus = LargeUtf8("F")] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey], full_filters=[nation.n_name = LargeUtf8("SAUDI ARABIA")] | +| | SubqueryAlias: __correlated_sq_1 | +| | SubqueryAlias: l2 | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey] | +| | SubqueryAlias: __correlated_sq_2 | +| | SubqueryAlias: l3 | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey], full_filters=[lineitem.l_receiptdate > lineitem.l_commitdate] | +| physical_plan | SortPreservingMergeExec: [numwait@1 DESC, s_name@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[numwait@1 DESC, s_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_name@0 as s_name, count(*)@1 as numwait] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_name@0 as s_name], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_name@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_name@0 as s_name], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(l_orderkey@1, l_orderkey@0)], filter=l_suppkey@1 != l_suppkey@0, projection=[s_name@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(l_orderkey@1, l_orderkey@0)], filter=l_suppkey@1 != l_suppkey@0 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@1, n_nationkey@0)], projection=[s_name@0, l_orderkey@2, l_suppkey@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@2, o_orderkey@0)], projection=[s_name@0, s_nationkey@1, l_orderkey@2, l_suppkey@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1)], projection=[s_name@1, s_nationkey@2, l_orderkey@3, l_suppkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_name, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_suppkey], predicate=l_receiptdate@12 > l_commitdate@11 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey], predicate=o_orderstatus@2 = F, pruning_predicate=o_orderstatus_null_count@2 != o_orderstatus_row_count@3 AND o_orderstatus_min@0 <= F AND F <= o_orderstatus_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey], predicate=n_name@1 = SAUDI ARABIA, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= SAUDI ARABIA AND SAUDI ARABIA <= n_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_suppkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_suppkey], predicate=l_receiptdate@12 > l_commitdate@11 | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q22_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q22_explain.snap new file mode 100644 index 0000000000..e795336d93 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q22_explain.snap @@ -0,0 +1,52 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q22" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: custsale.cntrycode ASC NULLS LAST | +| | Projection: custsale.cntrycode, count(*) AS numcust, sum(custsale.c_acctbal) AS totacctbal | +| | Aggregate: groupBy=[[custsale.cntrycode]], aggr=[[count(Int64(1)) AS count(*), sum(custsale.c_acctbal)]] | +| | SubqueryAlias: custsale | +| | Projection: substr(customer.c_phone, Int64(1), Int64(2)) AS cntrycode, customer.c_acctbal | +| | Inner Join: Filter: CAST(customer.c_acctbal AS Decimal128(19, 6)) > __scalar_sq_2.avg(customer.c_acctbal) | +| | Projection: customer.c_phone, customer.c_acctbal | +| | LeftAnti Join: customer.c_custkey = __correlated_sq_1.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_phone, c_acctbal], full_filters=[substr(customer.c_phone, Int64(1), Int64(2)) IN ([LargeUtf8("13"), LargeUtf8("31"), LargeUtf8("23"), LargeUtf8("29"), LargeUtf8("30"), LargeUtf8("18"), LargeUtf8("17")])] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_custkey] | +| | SubqueryAlias: __scalar_sq_2 | +| | Aggregate: groupBy=[[]], aggr=[[avg(customer.c_acctbal)]] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_acctbal], full_filters=[customer.c_acctbal > Decimal128(Some(0),15,2), substr(customer.c_phone, Int64(1), Int64(2)) IN ([LargeUtf8("13"), LargeUtf8("31"), LargeUtf8("23"), LargeUtf8("29"), LargeUtf8("30"), LargeUtf8("18"), LargeUtf8("17")])] | +| physical_plan | SortPreservingMergeExec: [cntrycode@0 ASC NULLS LAST] | +| | SortExec: expr=[cntrycode@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[cntrycode@0 as cntrycode, count(*)@1 as numcust, sum(custsale.c_acctbal)@2 as totacctbal] | +| | AggregateExec: mode=FinalPartitioned, gby=[cntrycode@0 as cntrycode], aggr=[count(*), sum(custsale.c_acctbal)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cntrycode@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cntrycode@0 as cntrycode], aggr=[count(*), sum(custsale.c_acctbal)] | +| | ProjectionExec: expr=[substr(c_phone@0, 1, 2) as cntrycode, c_acctbal@1 as c_acctbal] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | NestedLoopJoinExec: join_type=Inner, filter=CAST(c_acctbal@0 AS Decimal128(19, 6)) > avg(customer.c_acctbal)@1 | +| | CoalescePartitionsExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(c_custkey@0, o_custkey@0)], projection=[c_phone@1, c_acctbal@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey, c_phone, c_acctbal], predicate=Use substr(c_phone@4, 1, 2) IN (SET) ([Literal { value: LargeUtf8("13") }, Literal { value: LargeUtf8("31") }, Literal { value: LargeUtf8("23") }, Literal { value: LargeUtf8("29") }, Literal { value: LargeUtf8("30") }, Literal { value: LargeUtf8("18") }, Literal { value: LargeUtf8("17") }]) | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_custkey] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(customer.c_acctbal)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(customer.c_acctbal)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_acctbal], predicate=c_acctbal@5 > Some(0),15,2 AND Use substr(c_phone@4, 1, 2) IN (SET) ([Literal { value: LargeUtf8("13") }, Literal { value: LargeUtf8("31") }, Literal { value: LargeUtf8("23") }, Literal { value: LargeUtf8("29") }, Literal { value: LargeUtf8("30") }, Literal { value: LargeUtf8("18") }, Literal { value: LargeUtf8("17") }]), pruning_predicate=c_acctbal_null_count@1 != c_acctbal_row_count@2 AND c_acctbal_max@0 > Some(0),15,2, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q2_explain.snap new file mode 100644 index 0000000000..73ff2340ca --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q2_explain.snap @@ -0,0 +1,129 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q2" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: supplier.s_acctbal DESC NULLS FIRST, nation.n_name ASC NULLS LAST, supplier.s_name ASC NULLS LAST, part.p_partkey ASC NULLS LAST, fetch=100 | +| | Projection: supplier.s_acctbal, supplier.s_name, nation.n_name, part.p_partkey, part.p_mfgr, supplier.s_address, supplier.s_phone, supplier.s_comment | +| | Inner Join: part.p_partkey = __scalar_sq_1.ps_partkey, partsupp.ps_supplycost = __scalar_sq_1.min(partsupp.ps_supplycost) | +| | Projection: part.p_partkey, part.p_mfgr, supplier.s_name, supplier.s_address, supplier.s_phone, supplier.s_acctbal, supplier.s_comment, partsupp.ps_supplycost, nation.n_name | +| | Inner Join: nation.n_regionkey = region.r_regionkey | +| | Projection: part.p_partkey, part.p_mfgr, supplier.s_name, supplier.s_address, supplier.s_phone, supplier.s_acctbal, supplier.s_comment, partsupp.ps_supplycost, nation.n_name, nation.n_regionkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: part.p_partkey, part.p_mfgr, supplier.s_name, supplier.s_address, supplier.s_nationkey, supplier.s_phone, supplier.s_acctbal, supplier.s_comment, partsupp.ps_supplycost | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | Projection: part.p_partkey, part.p_mfgr, partsupp.ps_suppkey, partsupp.ps_supplycost | +| | Inner Join: part.p_partkey = partsupp.ps_partkey | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey, p_mfgr], full_filters=[part.p_size = Int32(15), part.p_type LIKE LargeUtf8("%BRASS")] | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name, n_regionkey] | +| | BytesProcessedNode | +| | TableScan: region projection=[r_regionkey], full_filters=[region.r_name = LargeUtf8("EUROPE")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: min(partsupp.ps_supplycost), partsupp.ps_partkey | +| | Aggregate: groupBy=[[partsupp.ps_partkey]], aggr=[[min(partsupp.ps_supplycost)]] | +| | Projection: partsupp.ps_partkey, partsupp.ps_supplycost | +| | Inner Join: nation.n_regionkey = region.r_regionkey | +| | Projection: partsupp.ps_partkey, partsupp.ps_supplycost, nation.n_regionkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: partsupp.ps_partkey, partsupp.ps_supplycost, supplier.s_nationkey | +| | Inner Join: partsupp.ps_suppkey = supplier.s_suppkey | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_regionkey] | +| | BytesProcessedNode | +| | TableScan: region projection=[r_regionkey], full_filters=[region.r_name = LargeUtf8("EUROPE")] | +| physical_plan | SortPreservingMergeExec: [s_acctbal@0 DESC, n_name@2 ASC NULLS LAST, s_name@1 ASC NULLS LAST, p_partkey@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[s_acctbal@0 DESC, n_name@2 ASC NULLS LAST, s_name@1 ASC NULLS LAST, p_partkey@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_acctbal@5 as s_acctbal, s_name@2 as s_name, n_name@7 as n_name, p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_address@3 as s_address, s_phone@4 as s_phone, s_comment@6 as s_comment] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, ps_partkey@1), (ps_supplycost@7, min(partsupp.ps_supplycost)@0)], projection=[p_partkey@0, p_mfgr@1, s_name@2, s_address@3, s_phone@4, s_acctbal@5, s_comment@6, n_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0, ps_supplycost@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@9, r_regionkey@0)], projection=[p_partkey@0, p_mfgr@1, s_name@2, s_address@3, s_phone@4, s_acctbal@5, s_comment@6, ps_supplycost@7, n_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@9], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@4, n_nationkey@0)], projection=[p_partkey@0, p_mfgr@1, s_name@2, s_address@3, s_phone@5, s_acctbal@6, s_comment@7, ps_supplycost@8, n_name@10, n_regionkey@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@4], 24), input_partitions=24 | +| | ProjectionExec: expr=[p_partkey@0 as p_partkey, p_mfgr@1 as p_mfgr, s_name@3 as s_name, s_address@4 as s_address, s_nationkey@5 as s_nationkey, s_phone@6 as s_phone, s_acctbal@7 as s_acctbal, s_comment@8 as s_comment, ps_supplycost@2 as ps_supplycost] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@2, s_suppkey@0)], projection=[p_partkey@0, p_mfgr@1, ps_supplycost@3, s_name@5, s_address@6, s_nationkey@7, s_phone@8, s_acctbal@9, s_comment@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, ps_partkey@0)], projection=[p_partkey@0, p_mfgr@1, ps_suppkey@3, ps_supplycost@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey, p_mfgr], predicate=p_size@5 = 15 AND p_type@4 LIKE %BRASS, pruning_predicate=p_size_null_count@2 != p_size_row_count@3 AND p_size_min@0 <= 15 AND 15 <= p_size_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/partsupp.parquet:0..1737389], [/data/partsupp.parquet:1737389..3474778], [/data/partsupp.parquet:3474778..5212167], [/data/partsupp.parquet:5212167..6949556], [/data/partsupp.parquet:6949556..8686945], ...]}, projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_name, n_regionkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/region.parquet]]}, projection=[r_regionkey], predicate=r_name@1 = EUROPE, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= EUROPE AND EUROPE <= r_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@1, min(partsupp.ps_supplycost)@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[min(partsupp.ps_supplycost)@1 as min(partsupp.ps_supplycost), ps_partkey@0 as ps_partkey] | +| | AggregateExec: mode=FinalPartitioned, gby=[ps_partkey@0 as ps_partkey], aggr=[min(partsupp.ps_supplycost)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_partkey@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ps_partkey@0 as ps_partkey], aggr=[min(partsupp.ps_supplycost)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@2, r_regionkey@0)], projection=[ps_partkey@0, ps_supplycost@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[ps_partkey@0, ps_supplycost@1, n_regionkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ps_suppkey@1, s_suppkey@0)], projection=[ps_partkey@0, ps_supplycost@2, s_nationkey@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/partsupp.parquet:0..1737389], [/data/partsupp.parquet:1737389..3474778], [/data/partsupp.parquet:3474778..5212167], [/data/partsupp.parquet:5212167..6949556], [/data/partsupp.parquet:6949556..8686945], ...]}, projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_regionkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/region.parquet]]}, projection=[r_regionkey], predicate=r_name@1 = EUROPE, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= EUROPE AND EUROPE <= r_name_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q3_explain.snap new file mode 100644 index 0000000000..d868aaf46d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q3_explain.snap @@ -0,0 +1,47 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q3" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: revenue DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST, fetch=10 | +| | Projection: lineitem.l_orderkey, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue, orders.o_orderdate, orders.o_shippriority | +| | Aggregate: groupBy=[[lineitem.l_orderkey, orders.o_orderdate, orders.o_shippriority]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: orders.o_orderdate, orders.o_shippriority, lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: orders.o_orderkey, orders.o_orderdate, orders.o_shippriority | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey], full_filters=[customer.c_mktsegment = LargeUtf8("BUILDING")] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate, o_shippriority], full_filters=[orders.o_orderdate < Date32("1995-03-15")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount], full_filters=[lineitem.l_shipdate > Date32("1995-03-15")] | +| physical_plan | SortPreservingMergeExec: [revenue@1 DESC, o_orderdate@2 ASC NULLS LAST], fetch=10 | +| | SortExec: TopK(fetch=10), expr=[revenue@1 DESC, o_orderdate@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_orderkey@0 as l_orderkey, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@3 as revenue, o_orderdate@1 as o_orderdate, o_shippriority@2 as o_shippriority] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_orderkey@0 as l_orderkey, o_orderdate@1 as o_orderdate, o_shippriority@2 as o_shippriority], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0, o_orderdate@1, o_shippriority@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_orderkey@2 as l_orderkey, o_orderdate@0 as o_orderdate, o_shippriority@1 as o_shippriority], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@0, l_orderkey@0)], projection=[o_orderdate@1, o_shippriority@2, l_orderkey@3, l_extendedprice@4, l_discount@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[o_orderkey@1, o_orderdate@3, o_shippriority@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey], predicate=c_mktsegment@6 = BUILDING, pruning_predicate=c_mktsegment_null_count@2 != c_mktsegment_row_count@3 AND c_mktsegment_min@0 <= BUILDING AND BUILDING <= c_mktsegment_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_custkey, o_orderdate, o_shippriority], predicate=o_orderdate@4 < 1995-03-15, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@0 < 1995-03-15, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_extendedprice, l_discount], predicate=l_shipdate@10 > 1995-03-15, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 > 1995-03-15, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q4_explain.snap new file mode 100644 index 0000000000..475008fd79 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q4_explain.snap @@ -0,0 +1,36 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q4" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: orders.o_orderpriority ASC NULLS LAST | +| | Projection: orders.o_orderpriority, count(*) AS order_count | +| | Aggregate: groupBy=[[orders.o_orderpriority]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: orders.o_orderpriority | +| | LeftSemi Join: orders.o_orderkey = __correlated_sq_1.l_orderkey | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_orderpriority], full_filters=[orders.o_orderdate >= Date32("1993-07-01"), orders.o_orderdate < Date32("1993-10-01")] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey], full_filters=[lineitem.l_receiptdate > lineitem.l_commitdate] | +| physical_plan | SortPreservingMergeExec: [o_orderpriority@0 ASC NULLS LAST] | +| | SortExec: expr=[o_orderpriority@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[o_orderpriority@0 as o_orderpriority, count(*)@1 as order_count] | +| | AggregateExec: mode=FinalPartitioned, gby=[o_orderpriority@0 as o_orderpriority], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderpriority@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[o_orderpriority@0 as o_orderpriority], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(o_orderkey@0, l_orderkey@0)], projection=[o_orderpriority@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_orderpriority], predicate=o_orderdate@4 >= 1993-07-01 AND o_orderdate@4 < 1993-10-01, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1993-07-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 < 1993-10-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey], predicate=l_receiptdate@12 > l_commitdate@11 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q5_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q5_explain.snap new file mode 100644 index 0000000000..6975a260bc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q5_explain.snap @@ -0,0 +1,86 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q5" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: revenue DESC NULLS FIRST | +| | Projection: nation.n_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[nation.n_name]], aggr=[[sum(lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount)) AS sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)]] | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, nation.n_name | +| | Inner Join: nation.n_regionkey = region.r_regionkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, nation.n_name, nation.n_regionkey | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey | +| | Inner Join: lineitem.l_suppkey = supplier.s_suppkey, customer.c_nationkey = supplier.s_nationkey | +| | Projection: customer.c_nationkey, lineitem.l_suppkey, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: orders.o_orderkey = lineitem.l_orderkey | +| | Projection: customer.c_nationkey, orders.o_orderkey | +| | Inner Join: customer.c_custkey = orders.o_custkey | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey], full_filters=[orders.o_orderdate >= Date32("1994-01-01"), orders.o_orderdate < Date32("1995-01-01")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name, n_regionkey] | +| | BytesProcessedNode | +| | TableScan: region projection=[r_regionkey], full_filters=[region.r_name = LargeUtf8("ASIA")] | +| physical_plan | SortPreservingMergeExec: [revenue@1 DESC] | +| | SortExec: expr=[revenue@1 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[n_name@0 as n_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)@1 as revenue] | +| | AggregateExec: mode=FinalPartitioned, gby=[n_name@0 as n_name], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_name@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[n_name@2 as n_name], aggr=[sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@3, r_regionkey@0)], projection=[l_extendedprice@0, l_discount@1, n_name@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[l_extendedprice@0, l_discount@1, n_name@4, n_regionkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@1, s_suppkey@0), (c_nationkey@0, s_nationkey@1)], projection=[l_extendedprice@2, l_discount@3, s_nationkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1, c_nationkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@1, l_orderkey@0)], projection=[c_nationkey@0, l_suppkey@3, l_extendedprice@4, l_discount@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_custkey@0, o_custkey@1)], projection=[c_nationkey@1, o_orderkey@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey, c_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_custkey], predicate=o_orderdate@4 >= 1994-01-01 AND o_orderdate@4 < 1995-01-01, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1994-01-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 < 1995-01-01, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0, s_nationkey@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_name, n_regionkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/region.parquet]]}, projection=[r_regionkey], predicate=r_name@1 = ASIA, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= ASIA AND ASIA <= r_name_max@1, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q6_explain.snap new file mode 100644 index 0000000000..8842840893 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q6_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q6" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: sum(lineitem.l_extendedprice * lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice * lineitem.l_discount)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_extendedprice, l_discount], full_filters=[lineitem.l_shipdate >= Date32("1994-01-01"), lineitem.l_shipdate < Date32("1995-01-01"), lineitem.l_discount >= Decimal128(Some(5),15,2), lineitem.l_discount <= Decimal128(Some(7),15,2), lineitem.l_quantity < Decimal128(Some(2400),15,2)] | +| physical_plan | ProjectionExec: expr=[sum(lineitem.l_extendedprice * lineitem.l_discount)@0 as revenue] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(lineitem.l_extendedprice * lineitem.l_discount)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(lineitem.l_extendedprice * lineitem.l_discount)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_extendedprice, l_discount], predicate=l_shipdate@10 >= 1994-01-01 AND l_shipdate@10 < 1995-01-01 AND l_discount@6 >= Some(5),15,2 AND l_discount@6 <= Some(7),15,2 AND l_quantity@4 < Some(2400),15,2, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1994-01-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 < 1995-01-01 AND l_discount_null_count@5 != l_discount_row_count@6 AND l_discount_max@4 >= Some(5),15,2 AND l_discount_null_count@5 != l_discount_row_count@6 AND l_discount_min@7 <= Some(7),15,2 AND l_quantity_null_count@9 != l_quantity_row_count@10 AND l_quantity_min@8 < Some(2400),15,2, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q7_explain.snap new file mode 100644 index 0000000000..23768553b1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q7_explain.snap @@ -0,0 +1,90 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q7" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: shipping.supp_nation ASC NULLS LAST, shipping.cust_nation ASC NULLS LAST, shipping.l_year ASC NULLS LAST | +| | Projection: shipping.supp_nation, shipping.cust_nation, shipping.l_year, sum(shipping.volume) AS revenue | +| | Aggregate: groupBy=[[shipping.supp_nation, shipping.cust_nation, shipping.l_year]], aggr=[[sum(shipping.volume)]] | +| | SubqueryAlias: shipping | +| | Projection: n1.n_name AS supp_nation, n2.n_name AS cust_nation, date_part(Utf8("YEAR"), lineitem.l_shipdate) AS l_year, lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS volume | +| | Inner Join: customer.c_nationkey = n2.n_nationkey Filter: n1.n_name = LargeUtf8("FRANCE") AND n2.n_name = LargeUtf8("GERMANY") OR n1.n_name = LargeUtf8("GERMANY") AND n2.n_name = LargeUtf8("FRANCE") | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate, customer.c_nationkey, n1.n_name | +| | Inner Join: supplier.s_nationkey = n1.n_nationkey | +| | Projection: supplier.s_nationkey, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate, customer.c_nationkey | +| | Inner Join: orders.o_custkey = customer.c_custkey | +| | Projection: supplier.s_nationkey, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate, orders.o_custkey | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | Projection: supplier.s_nationkey, lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_shipdate | +| | Inner Join: supplier.s_suppkey = lineitem.l_suppkey | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount, l_shipdate], full_filters=[lineitem.l_shipdate >= Date32("1995-01-01"), lineitem.l_shipdate <= Date32("1996-12-31")] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | SubqueryAlias: n1 | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name], full_filters=[nation.n_name = LargeUtf8("FRANCE") OR nation.n_name = LargeUtf8("GERMANY")] | +| | SubqueryAlias: n2 | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name], full_filters=[nation.n_name = LargeUtf8("GERMANY") OR nation.n_name = LargeUtf8("FRANCE")] | +| physical_plan | SortPreservingMergeExec: [supp_nation@0 ASC NULLS LAST, cust_nation@1 ASC NULLS LAST, l_year@2 ASC NULLS LAST] | +| | SortExec: expr=[supp_nation@0 ASC NULLS LAST, cust_nation@1 ASC NULLS LAST, l_year@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[supp_nation@0 as supp_nation, cust_nation@1 as cust_nation, l_year@2 as l_year, sum(shipping.volume)@3 as revenue] | +| | AggregateExec: mode=FinalPartitioned, gby=[supp_nation@0 as supp_nation, cust_nation@1 as cust_nation, l_year@2 as l_year], aggr=[sum(shipping.volume)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([supp_nation@0, cust_nation@1, l_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[supp_nation@0 as supp_nation, cust_nation@1 as cust_nation, l_year@2 as l_year], aggr=[sum(shipping.volume)] | +| | ProjectionExec: expr=[n_name@3 as supp_nation, n_name@4 as cust_nation, date_part(YEAR, l_shipdate@2) as l_year, l_extendedprice@0 * (Some(1),20,0 - l_discount@1) as volume] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_nationkey@3, n_nationkey@0)], filter=n_name@0 = FRANCE AND n_name@1 = GERMANY OR n_name@0 = GERMANY AND n_name@1 = FRANCE, projection=[l_extendedprice@0, l_discount@1, l_shipdate@2, n_name@4, n_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@0, n_nationkey@0)], projection=[l_extendedprice@1, l_discount@2, l_shipdate@3, c_nationkey@4, n_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_custkey@4, c_custkey@0)], projection=[s_nationkey@0, l_extendedprice@1, l_discount@2, l_shipdate@3, c_nationkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@1, o_orderkey@0)], projection=[s_nationkey@0, l_extendedprice@2, l_discount@3, l_shipdate@4, o_custkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_suppkey@0, l_suppkey@1)], projection=[s_nationkey@1, l_orderkey@2, l_extendedprice@4, l_discount@5, l_shipdate@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount, l_shipdate], predicate=l_shipdate@10 >= 1995-01-01 AND l_shipdate@10 <= 1996-12-31, pruning_predicate=l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_max@0 >= 1995-01-01 AND l_shipdate_null_count@1 != l_shipdate_row_count@2 AND l_shipdate_min@3 <= 1996-12-31, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_custkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey, c_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = FRANCE OR n_name@1 = GERMANY, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= FRANCE AND FRANCE <= n_name_max@1 OR n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_name], predicate=n_name@1 = GERMANY OR n_name@1 = FRANCE, pruning_predicate=n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= GERMANY AND GERMANY <= n_name_max@1 OR n_name_null_count@2 != n_name_row_count@3 AND n_name_min@0 <= FRANCE AND FRANCE <= n_name_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q8_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q8_explain.snap new file mode 100644 index 0000000000..36406ae287 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q8_explain.snap @@ -0,0 +1,116 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q8" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: all_nations.o_year ASC NULLS LAST | +| | Projection: all_nations.o_year, sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END) / sum(all_nations.volume) AS mkt_share | +| | Aggregate: groupBy=[[all_nations.o_year]], aggr=[[sum(CASE WHEN all_nations.nation = LargeUtf8("BRAZIL") THEN all_nations.volume ELSE Decimal128(Some(0),38,4) END) AS sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END), sum(all_nations.volume)]] | +| | SubqueryAlias: all_nations | +| | Projection: date_part(Utf8("YEAR"), orders.o_orderdate) AS o_year, lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) AS volume, n2.n_name AS nation | +| | Inner Join: n1.n_regionkey = region.r_regionkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, orders.o_orderdate, n1.n_regionkey, n2.n_name | +| | Inner Join: supplier.s_nationkey = n2.n_nationkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, orders.o_orderdate, n1.n_regionkey | +| | Inner Join: customer.c_nationkey = n1.n_nationkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, orders.o_orderdate, customer.c_nationkey | +| | Inner Join: orders.o_custkey = customer.c_custkey | +| | Projection: lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, orders.o_custkey, orders.o_orderdate | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | Projection: lineitem.l_orderkey, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey | +| | Inner Join: lineitem.l_suppkey = supplier.s_suppkey | +| | Projection: lineitem.l_orderkey, lineitem.l_suppkey, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: part.p_partkey = lineitem.l_partkey | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey], full_filters=[part.p_type = LargeUtf8("ECONOMY ANODIZED STEEL")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_partkey, l_suppkey, l_extendedprice, l_discount] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate], full_filters=[orders.o_orderdate >= Date32("1995-01-01"), orders.o_orderdate <= Date32("1996-12-31")] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | SubqueryAlias: n1 | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_regionkey] | +| | SubqueryAlias: n2 | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name] | +| | BytesProcessedNode | +| | TableScan: region projection=[r_regionkey], full_filters=[region.r_name = LargeUtf8("AMERICA")] | +| physical_plan | SortPreservingMergeExec: [o_year@0 ASC NULLS LAST] | +| | SortExec: expr=[o_year@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[o_year@0 as o_year, sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END)@1 / sum(all_nations.volume)@2 as mkt_share] | +| | AggregateExec: mode=FinalPartitioned, gby=[o_year@0 as o_year], aggr=[sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END), sum(all_nations.volume)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_year@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[o_year@0 as o_year], aggr=[sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END), sum(all_nations.volume)] | +| | ProjectionExec: expr=[date_part(YEAR, o_orderdate@2) as o_year, l_extendedprice@0 * (Some(1),20,0 - l_discount@1) as volume, n_name@3 as nation] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(n_regionkey@3, r_regionkey@0)], projection=[l_extendedprice@0, l_discount@1, o_orderdate@2, n_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_regionkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@2, n_nationkey@0)], projection=[l_extendedprice@0, l_discount@1, o_orderdate@3, n_regionkey@4, n_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_nationkey@4, n_nationkey@0)], projection=[l_extendedprice@0, l_discount@1, s_nationkey@2, o_orderdate@3, n_regionkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_nationkey@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_custkey@3, c_custkey@0)], projection=[l_extendedprice@0, l_discount@1, s_nationkey@2, o_orderdate@4, c_nationkey@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_custkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@0, o_orderkey@0)], projection=[l_extendedprice@1, l_discount@2, s_nationkey@3, o_custkey@5, o_orderdate@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@1, s_suppkey@0)], projection=[l_orderkey@0, l_extendedprice@2, l_discount@3, s_nationkey@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, l_partkey@1)], projection=[l_orderkey@1, l_suppkey@3, l_extendedprice@4, l_discount@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey], predicate=p_type@4 = ECONOMY ANODIZED STEEL, pruning_predicate=p_type_null_count@2 != p_type_row_count@3 AND p_type_min@0 <= ECONOMY ANODIZED STEEL AND ECONOMY ANODIZED STEEL <= p_type_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_partkey, l_suppkey, l_extendedprice, l_discount] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_custkey, o_orderdate], predicate=o_orderdate@4 >= 1995-01-01 AND o_orderdate@4 <= 1996-12-31, pruning_predicate=o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_max@0 >= 1995-01-01 AND o_orderdate_null_count@1 != o_orderdate_row_count@2 AND o_orderdate_min@3 <= 1996-12-31, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_custkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/customer.parquet:0..557388], [/data/customer.parquet:557388..1114776], [/data/customer.parquet:1114776..1672164], [/data/customer.parquet:1672164..2229552], [/data/customer.parquet:2229552..2786940], ...]}, projection=[c_custkey, c_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_regionkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_regionkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/region.parquet]]}, projection=[r_regionkey], predicate=r_name@1 = AMERICA, pruning_predicate=r_name_null_count@2 != r_name_row_count@3 AND r_name_min@0 <= AMERICA AND AMERICA <= r_name_max@1, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q9_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q9_explain.snap new file mode 100644 index 0000000000..5ff40b4069 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_q9_explain.snap @@ -0,0 +1,88 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q9" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: profit.nation ASC NULLS LAST, profit.o_year DESC NULLS FIRST | +| | Projection: profit.nation, profit.o_year, sum(profit.amount) AS sum_profit | +| | Aggregate: groupBy=[[profit.nation, profit.o_year]], aggr=[[sum(profit.amount)]] | +| | SubqueryAlias: profit | +| | Projection: nation.n_name AS nation, date_part(Utf8("YEAR"), orders.o_orderdate) AS o_year, lineitem.l_extendedprice * (Decimal128(Some(1),20,0) - lineitem.l_discount) - partsupp.ps_supplycost * lineitem.l_quantity AS amount | +| | Inner Join: supplier.s_nationkey = nation.n_nationkey | +| | Projection: lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, partsupp.ps_supplycost, orders.o_orderdate | +| | Inner Join: lineitem.l_orderkey = orders.o_orderkey | +| | Projection: lineitem.l_orderkey, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey, partsupp.ps_supplycost | +| | Inner Join: lineitem.l_suppkey = partsupp.ps_suppkey, lineitem.l_partkey = partsupp.ps_partkey | +| | Projection: lineitem.l_orderkey, lineitem.l_partkey, lineitem.l_suppkey, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, supplier.s_nationkey | +| | Inner Join: lineitem.l_suppkey = supplier.s_suppkey | +| | Projection: lineitem.l_orderkey, lineitem.l_partkey, lineitem.l_suppkey, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount | +| | Inner Join: part.p_partkey = lineitem.l_partkey | +| | BytesProcessedNode | +| | TableScan: part projection=[p_partkey], full_filters=[part.p_name LIKE LargeUtf8("%green%")] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_partkey, l_suppkey, l_quantity, l_extendedprice, l_discount] | +| | BytesProcessedNode | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | BytesProcessedNode | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_orderdate] | +| | BytesProcessedNode | +| | TableScan: nation projection=[n_nationkey, n_name] | +| physical_plan | SortPreservingMergeExec: [nation@0 ASC NULLS LAST, o_year@1 DESC] | +| | SortExec: expr=[nation@0 ASC NULLS LAST, o_year@1 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[nation@0 as nation, o_year@1 as o_year, sum(profit.amount)@2 as sum_profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[nation@0 as nation, o_year@1 as o_year], aggr=[sum(profit.amount)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([nation@0, o_year@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[nation@0 as nation, o_year@1 as o_year], aggr=[sum(profit.amount)] | +| | ProjectionExec: expr=[n_name@5 as nation, date_part(YEAR, o_orderdate@4) as o_year, l_extendedprice@1 * (Some(1),20,0 - l_discount@2) - ps_supplycost@3 * l_quantity@0 as amount] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_nationkey@3, n_nationkey@0)], projection=[l_quantity@0, l_extendedprice@1, l_discount@2, ps_supplycost@4, o_orderdate@5, n_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_nationkey@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_orderkey@0, o_orderkey@0)], projection=[l_quantity@1, l_extendedprice@2, l_discount@3, s_nationkey@4, ps_supplycost@5, o_orderdate@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@2, ps_suppkey@1), (l_partkey@1, ps_partkey@0)], projection=[l_orderkey@0, l_quantity@3, l_extendedprice@4, l_discount@5, s_nationkey@6, ps_supplycost@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@2, l_partkey@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_suppkey@2, s_suppkey@0)], projection=[l_orderkey@0, l_partkey@1, l_suppkey@2, l_quantity@3, l_extendedprice@4, l_discount@5, s_nationkey@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_suppkey@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(p_partkey@0, l_partkey@1)], projection=[l_orderkey@1, l_partkey@2, l_suppkey@3, l_quantity@4, l_extendedprice@5, l_discount@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_partkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/part.parquet]]}, projection=[p_partkey], predicate=p_name@1 LIKE %green% | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_partkey@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_partkey, l_suppkey, l_quantity, l_extendedprice, l_discount] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_suppkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/supplier.parquet]]}, projection=[s_suppkey, s_nationkey] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ps_suppkey@1, ps_partkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/partsupp.parquet:0..1737389], [/data/partsupp.parquet:1737389..3474778], [/data/partsupp.parquet:3474778..5212167], [/data/partsupp.parquet:5212167..6949556], [/data/partsupp.parquet:6949556..8686945], ...]}, projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_orderdate] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([n_nationkey@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[/data/nation.parquet]]}, projection=[n_nationkey, n_name] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q1_explain.snap new file mode 100644 index 0000000000..13b6e24bc4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q1_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q1" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Aggregate: groupBy=[[]], aggr=[[max(lineitem.l_orderkey)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey] | +| physical_plan | AggregateExec: mode=Final, gby=[], aggr=[max(lineitem.l_orderkey)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[max(lineitem.l_orderkey)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q2_explain.snap new file mode 100644 index 0000000000..ea63e3d93e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q2_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q2" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: lineitem.l_linenumber | +| | Inner Join: lineitem.l_linenumber = __scalar_sq_1.max(lineitem.l_linenumber) | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_linenumber] | +| | SubqueryAlias: __scalar_sq_1 | +| | Aggregate: groupBy=[[]], aggr=[[max(lineitem.l_linenumber)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_linenumber] | +| physical_plan | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(l_linenumber@0, max(lineitem.l_linenumber)@0)], projection=[l_linenumber@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_linenumber@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_linenumber] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([max(lineitem.l_linenumber)@0], 24), input_partitions=1 | +| | AggregateExec: mode=Final, gby=[], aggr=[max(lineitem.l_linenumber)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[max(lineitem.l_linenumber)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_linenumber] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q3_explain.snap new file mode 100644 index 0000000000..e05c780a3b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q3_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q3" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: lineitem.l_comment, lineitem.l_partkey | +| | Sort: lineitem.l_linenumber DESC NULLS FIRST, fetch=10 | +| | Projection: lineitem.l_comment, lineitem.l_partkey, lineitem.l_linenumber | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_partkey, l_linenumber, l_comment] | +| physical_plan | ProjectionExec: expr=[l_comment@0 as l_comment, l_partkey@1 as l_partkey] | +| | SortPreservingMergeExec: [l_linenumber@2 DESC], fetch=10 | +| | SortExec: TopK(fetch=10), expr=[l_linenumber@2 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[l_comment@2 as l_comment, l_partkey@0 as l_partkey, l_linenumber@1 as l_linenumber] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_partkey, l_linenumber, l_comment] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q4_explain.snap new file mode 100644 index 0000000000..42c5278ed4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q4_explain.snap @@ -0,0 +1,23 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q4" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lineitem.l_quantity DESC NULLS FIRST, fetch=10 | +| | Projection: avg(lineitem.l_tax), lineitem.l_linenumber, lineitem.l_quantity | +| | Aggregate: groupBy=[[lineitem.l_linenumber, lineitem.l_quantity]], aggr=[[avg(lineitem.l_tax)]] | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_linenumber, l_quantity, l_tax] | +| physical_plan | SortPreservingMergeExec: [l_quantity@2 DESC], fetch=10 | +| | SortExec: TopK(fetch=10), expr=[l_quantity@2 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[avg(lineitem.l_tax)@2 as avg(lineitem.l_tax), l_linenumber@0 as l_linenumber, l_quantity@1 as l_quantity] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_linenumber@0 as l_linenumber, l_quantity@1 as l_quantity], aggr=[avg(lineitem.l_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_linenumber@0, l_quantity@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_linenumber@0 as l_linenumber, l_quantity@1 as l_quantity], aggr=[avg(lineitem.l_tax)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_linenumber, l_quantity, l_tax] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q5_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q5_explain.snap new file mode 100644 index 0000000000..0ef230844a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q5_explain.snap @@ -0,0 +1,37 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q5" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: total_price DESC NULLS FIRST | +| | Projection: sum(o.o_totalprice) AS total_price, l.l_linestatus | +| | Aggregate: groupBy=[[l.l_linestatus]], aggr=[[sum(o.o_totalprice)]] | +| | Projection: o.o_totalprice, l.l_linestatus | +| | Inner Join: o.o_orderkey = l.l_orderkey | +| | SubqueryAlias: o | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey, o_totalprice] | +| | SubqueryAlias: l | +| | BytesProcessedNode | +| | TableScan: lineitem projection=[l_orderkey, l_linestatus] | +| physical_plan | SortPreservingMergeExec: [total_price@0 DESC] | +| | SortExec: expr=[total_price@0 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[sum(o.o_totalprice)@1 as total_price, l_linestatus@0 as l_linestatus] | +| | AggregateExec: mode=FinalPartitioned, gby=[l_linestatus@0 as l_linestatus], aggr=[sum(o.o_totalprice)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_linestatus@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[l_linestatus@1 as l_linestatus], aggr=[sum(o.o_totalprice)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(o_orderkey@0, l_orderkey@0)], projection=[o_totalprice@1, l_linestatus@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([o_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey, o_totalprice] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([l_orderkey@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/lineitem.parquet:0..8511096], [/data/lineitem.parquet:8511096..17022192], [/data/lineitem.parquet:17022192..25533288], [/data/lineitem.parquet:25533288..34044384], [/data/lineitem.parquet:34044384..42555480], ...]}, projection=[l_orderkey, l_linestatus] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q6_explain.snap new file mode 100644 index 0000000000..320c1c4772 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q6_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q6" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | SubqueryAlias: c | +| | Projection: CAST(orders.o_orderkey AS Int64) + Int64(1) AS key | +| | Limit: skip=0, fetch=10 | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey], fetch=10 | +| physical_plan | ProjectionExec: expr=[CAST(o_orderkey@0 AS Int64) + 1 as key] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | GlobalLimitExec: skip=0, fetch=10 | +| | CoalescePartitionsExec | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey], limit=10 | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q7_explain.snap new file mode 100644 index 0000000000..ff6f4a62b6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-federated_tpch_simple_q7_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_simple_q7" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | SubqueryAlias: c | +| | Projection: orders.o_orderkey AS key | +| | Limit: skip=0, fetch=10 | +| | BytesProcessedNode | +| | TableScan: orders projection=[o_orderkey], fetch=10 | +| physical_plan | ProjectionExec: expr=[o_orderkey@0 as key] | +| | GlobalLimitExec: skip=0, fetch=10 | +| | CoalescePartitionsExec | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[/data/orders.parquet:0..2311466], [/data/orders.parquet:2311466..4622932], [/data/orders.parquet:4622932..6934398], [/data/orders.parquet:6934398..9245864], [/data/orders.parquet:9245864..11557330], ...]}, projection=[o_orderkey], limit=10 | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q10_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q10_explain.snap new file mode 100644 index 0000000000..8e1917f169 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q10_explain.snap @@ -0,0 +1,45 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q10" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST, customer_demographics.cd_dep_count ASC NULLS LAST, customer_demographics.cd_dep_employed_count ASC NULLS LAST, customer_demographics.cd_dep_college_count ASC NULLS LAST | +| | Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(*) AS cnt2, customer_demographics.cd_credit_rating, count(*) AS cnt3, customer_demographics.cd_dep_count, count(*) AS cnt4, customer_demographics.cd_dep_employed_count, count(*) AS cnt5, customer_demographics.cd_dep_college_count, count(*) AS cnt6 | +| | Aggregate: groupBy=[[customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count]], aggr=[[count(*)]] | +| | Inner Join: Filter: customer_demographics.cd_demo_sk = c.c_current_cdemo_sk | +| | Inner Join: Filter: c.c_current_addr_sk = ca.ca_address_sk | +| | Filter: EXISTS () AND (EXISTS () OR EXISTS ()) | +| | Subquery: | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_sold_time_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, store_sales.ss_ext_tax, store_sales.ss_coupon_amt, store_sales.ss_net_paid, store_sales.ss_net_paid_inc_tax, store_sales.ss_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year | +| | Filter: outer_ref(c.c_customer_sk) = store_sales.ss_customer_sk AND store_sales.ss_sold_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(2002) AND date_dim.d_moy BETWEEN Int64(3) AND Int64(3) + Int64(3) | +| | Cross Join: | +| | TableScan: store_sales | +| | TableScan: date_dim | +| | Subquery: | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_sold_time_sk, web_sales.ws_ship_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_bill_cdemo_sk, web_sales.ws_bill_hdemo_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ship_customer_sk, web_sales.ws_ship_cdemo_sk, web_sales.ws_ship_hdemo_sk, web_sales.ws_ship_addr_sk, web_sales.ws_web_page_sk, web_sales.ws_web_site_sk, web_sales.ws_ship_mode_sk, web_sales.ws_warehouse_sk, web_sales.ws_promo_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_list_price, web_sales.ws_sales_price, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, web_sales.ws_ext_tax, web_sales.ws_coupon_amt, web_sales.ws_ext_ship_cost, web_sales.ws_net_paid, web_sales.ws_net_paid_inc_tax, web_sales.ws_net_paid_inc_ship, web_sales.ws_net_paid_inc_ship_tax, web_sales.ws_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year | +| | Filter: outer_ref(c.c_customer_sk) = web_sales.ws_bill_customer_sk AND web_sales.ws_sold_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(2002) AND date_dim.d_moy BETWEEN Int64(3) AND Int64(3) + Int64(3) | +| | Cross Join: | +| | TableScan: web_sales | +| | TableScan: date_dim | +| | Subquery: | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_bill_addr_sk, catalog_sales.cs_ship_customer_sk, catalog_sales.cs_ship_cdemo_sk, catalog_sales.cs_ship_hdemo_sk, catalog_sales.cs_ship_addr_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_catalog_page_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_warehouse_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, catalog_sales.cs_ext_tax, catalog_sales.cs_coupon_amt, catalog_sales.cs_ext_ship_cost, catalog_sales.cs_net_paid, catalog_sales.cs_net_paid_inc_tax, catalog_sales.cs_net_paid_inc_ship, catalog_sales.cs_net_paid_inc_ship_tax, catalog_sales.cs_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year | +| | Filter: outer_ref(c.c_customer_sk) = catalog_sales.cs_ship_customer_sk AND catalog_sales.cs_sold_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(2002) AND date_dim.d_moy BETWEEN Int64(3) AND Int64(3) + Int64(3) | +| | Cross Join: | +| | TableScan: catalog_sales | +| | TableScan: date_dim | +| | SubqueryAlias: c | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | Filter: ca.ca_county IN ([Utf8("Clinton County"), Utf8("Platte County"), Utf8("Franklin County"), Utf8("Louisa County"), Utf8("Harmon County")]) | +| | SubqueryAlias: ca | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating, cd_dep_count, cd_dep_employed_count, cd_dep_college_count] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(*) AS cnt2, customer_demographics.cd_credit_rating, count(*) AS cnt3, customer_demographics.cd_dep_count, count(*) AS cnt4, customer_demographics.cd_dep_employed_count, count(*) AS cnt5, customer_demographics.cd_dep_college_count, count(*) AS cnt6 FROM customer AS c JOIN customer_address AS ca ON ((c.c_current_addr_sk = ca.ca_address_sk) AND ((EXISTS (SELECT store_sales.ss_sold_date_sk, store_sales.ss_sold_time_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, store_sales.ss_ext_tax, store_sales.ss_coupon_amt, store_sales.ss_net_paid, store_sales.ss_net_paid_inc_tax, store_sales.ss_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year FROM store_sales CROSS JOIN date_dim WHERE ((((c.c_customer_sk = store_sales.ss_customer_sk) AND (store_sales.ss_sold_date_sk = date_dim.d_date_sk)) AND (date_dim.d_year = 2002)) AND (date_dim.d_moy BETWEEN 3 AND (3 + 3)))) AND (EXISTS (SELECT web_sales.ws_sold_date_sk, web_sales.ws_sold_time_sk, web_sales.ws_ship_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_bill_cdemo_sk, web_sales.ws_bill_hdemo_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ship_customer_sk, web_sales.ws_ship_cdemo_sk, web_sales.ws_ship_hdemo_sk, web_sales.ws_ship_addr_sk, web_sales.ws_web_page_sk, web_sales.ws_web_site_sk, web_sales.ws_ship_mode_sk, web_sales.ws_warehouse_sk, web_sales.ws_promo_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_list_price, web_sales.ws_sales_price, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, web_sales.ws_ext_tax, web_sales.ws_coupon_amt, web_sales.ws_ext_ship_cost, web_sales.ws_net_paid, web_sales.ws_net_paid_inc_tax, web_sales.ws_net_paid_inc_ship, web_sales.ws_net_paid_inc_ship_tax, web_sales.ws_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year FROM web_sales CROSS JOIN date_dim WHERE ((((c.c_customer_sk = web_sales.ws_bill_customer_sk) AND (web_sales.ws_sold_date_sk = date_dim.d_date_sk)) AND (date_dim.d_year = 2002)) AND (date_dim.d_moy BETWEEN 3 AND (3 + 3)))) OR EXISTS (SELECT catalog_sales.cs_sold_date_sk, catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_bill_addr_sk, catalog_sales.cs_ship_customer_sk, catalog_sales.cs_ship_cdemo_sk, catalog_sales.cs_ship_hdemo_sk, catalog_sales.cs_ship_addr_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_catalog_page_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_warehouse_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, catalog_sales.cs_ext_tax, catalog_sales.cs_coupon_amt, catalog_sales.cs_ext_ship_cost, catalog_sales.cs_net_paid, catalog_sales.cs_net_paid_inc_tax, catalog_sales.cs_net_paid_inc_ship, catalog_sales.cs_net_paid_inc_ship_tax, catalog_sales.cs_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year FROM catalog_sales CROSS JOIN date_dim WHERE ((((c.c_customer_sk = catalog_sales.cs_ship_customer_sk) AND (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) AND (date_dim.d_year = 2002)) AND (date_dim.d_moy BETWEEN 3 AND (3 + 3)))))) AND ca.ca_county IN ('Clinton County', 'Platte County', 'Franklin County', 'Louisa County', 'Harmon County'))) JOIN customer_demographics ON (customer_demographics.cd_demo_sk = c.c_current_cdemo_sk) GROUP BY customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count ORDER BY customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST, customer_demographics.cd_dep_count ASC NULLS LAST, customer_demographics.cd_dep_employed_count ASC NULLS LAST, customer_demographics.cd_dep_college_count ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer_demographics`.`cd_gender`, `customer_demographics`.`cd_marital_status`, `customer_demographics`.`cd_education_status`, count(*) AS `cnt1`, `customer_demographics`.`cd_purchase_estimate`, count(*) AS `cnt2`, `customer_demographics`.`cd_credit_rating`, count(*) AS `cnt3`, `customer_demographics`.`cd_dep_count`, count(*) AS `cnt4`, `customer_demographics`.`cd_dep_employed_count`, count(*) AS `cnt5`, `customer_demographics`.`cd_dep_college_count`, count(*) AS `cnt6` FROM `customer` AS `c` JOIN `customer_address` AS `ca` ON ((`c`.`c_current_addr_sk` = `ca`.`ca_address_sk`) AND ((EXISTS (SELECT `store_sales`.`ss_sold_date_sk`, `store_sales`.`ss_sold_time_sk`, `store_sales`.`ss_item_sk`, `store_sales`.`ss_customer_sk`, `store_sales`.`ss_cdemo_sk`, `store_sales`.`ss_hdemo_sk`, `store_sales`.`ss_addr_sk`, `store_sales`.`ss_store_sk`, `store_sales`.`ss_promo_sk`, `store_sales`.`ss_ticket_number`, `store_sales`.`ss_quantity`, `store_sales`.`ss_wholesale_cost`, `store_sales`.`ss_list_price`, `store_sales`.`ss_sales_price`, `store_sales`.`ss_ext_discount_amt`, `store_sales`.`ss_ext_sales_price`, `store_sales`.`ss_ext_wholesale_cost`, `store_sales`.`ss_ext_list_price`, `store_sales`.`ss_ext_tax`, `store_sales`.`ss_coupon_amt`, `store_sales`.`ss_net_paid`, `store_sales`.`ss_net_paid_inc_tax`, `store_sales`.`ss_net_profit`, `date_dim`.`d_date_sk`, `date_dim`.`d_date_id`, `date_dim`.`d_date`, `date_dim`.`d_month_seq`, `date_dim`.`d_week_seq`, `date_dim`.`d_quarter_seq`, `date_dim`.`d_year`, `date_dim`.`d_dow`, `date_dim`.`d_moy`, `date_dim`.`d_dom`, `date_dim`.`d_qoy`, `date_dim`.`d_fy_year`, `date_dim`.`d_fy_quarter_seq`, `date_dim`.`d_fy_week_seq`, `date_dim`.`d_day_name`, `date_dim`.`d_quarter_name`, `date_dim`.`d_holiday`, `date_dim`.`d_weekend`, `date_dim`.`d_following_holiday`, `date_dim`.`d_first_dom`, `date_dim`.`d_last_dom`, `date_dim`.`d_same_day_ly`, `date_dim`.`d_same_day_lq`, `date_dim`.`d_current_day`, `date_dim`.`d_current_week`, `date_dim`.`d_current_month`, `date_dim`.`d_current_quarter`, `date_dim`.`d_current_year` FROM `store_sales` CROSS JOIN `date_dim` WHERE ((((`c`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) AND (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`)) AND (`date_dim`.`d_year` = 2002)) AND (`date_dim`.`d_moy` BETWEEN 3 AND (3 + 3)))) AND (EXISTS (SELECT `web_sales`.`ws_sold_date_sk`, `web_sales`.`ws_sold_time_sk`, `web_sales`.`ws_ship_date_sk`, `web_sales`.`ws_item_sk`, `web_sales`.`ws_bill_customer_sk`, `web_sales`.`ws_bill_cdemo_sk`, `web_sales`.`ws_bill_hdemo_sk`, `web_sales`.`ws_bill_addr_sk`, `web_sales`.`ws_ship_customer_sk`, `web_sales`.`ws_ship_cdemo_sk`, `web_sales`.`ws_ship_hdemo_sk`, `web_sales`.`ws_ship_addr_sk`, `web_sales`.`ws_web_page_sk`, `web_sales`.`ws_web_site_sk`, `web_sales`.`ws_ship_mode_sk`, `web_sales`.`ws_warehouse_sk`, `web_sales`.`ws_promo_sk`, `web_sales`.`ws_order_number`, `web_sales`.`ws_quantity`, `web_sales`.`ws_wholesale_cost`, `web_sales`.`ws_list_price`, `web_sales`.`ws_sales_price`, `web_sales`.`ws_ext_discount_amt`, `web_sales`.`ws_ext_sales_price`, `web_sales`.`ws_ext_wholesale_cost`, `web_sales`.`ws_ext_list_price`, `web_sales`.`ws_ext_tax`, `web_sales`.`ws_coupon_amt`, `web_sales`.`ws_ext_ship_cost`, `web_sales`.`ws_net_paid`, `web_sales`.`ws_net_paid_inc_tax`, `web_sales`.`ws_net_paid_inc_ship`, `web_sales`.`ws_net_paid_inc_ship_tax`, `web_sales`.`ws_net_profit`, `date_dim`.`d_date_sk`, `date_dim`.`d_date_id`, `date_dim`.`d_date`, `date_dim`.`d_month_seq`, `date_dim`.`d_week_seq`, `date_dim`.`d_quarter_seq`, `date_dim`.`d_year`, `date_dim`.`d_dow`, `date_dim`.`d_moy`, `date_dim`.`d_dom`, `date_dim`.`d_qoy`, `date_dim`.`d_fy_year`, `date_dim`.`d_fy_quarter_seq`, `date_dim`.`d_fy_week_seq`, `date_dim`.`d_day_name`, `date_dim`.`d_quarter_name`, `date_dim`.`d_holiday`, `date_dim`.`d_weekend`, `date_dim`.`d_following_holiday`, `date_dim`.`d_first_dom`, `date_dim`.`d_last_dom`, `date_dim`.`d_same_day_ly`, `date_dim`.`d_same_day_lq`, `date_dim`.`d_current_day`, `date_dim`.`d_current_week`, `date_dim`.`d_current_month`, `date_dim`.`d_current_quarter`, `date_dim`.`d_current_year` FROM `web_sales` CROSS JOIN `date_dim` WHERE ((((`c`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) AND (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`)) AND (`date_dim`.`d_year` = 2002)) AND (`date_dim`.`d_moy` BETWEEN 3 AND (3 + 3)))) OR EXISTS (SELECT `catalog_sales`.`cs_sold_date_sk`, `catalog_sales`.`cs_sold_time_sk`, `catalog_sales`.`cs_ship_date_sk`, `catalog_sales`.`cs_bill_customer_sk`, `catalog_sales`.`cs_bill_cdemo_sk`, `catalog_sales`.`cs_bill_hdemo_sk`, `catalog_sales`.`cs_bill_addr_sk`, `catalog_sales`.`cs_ship_customer_sk`, `catalog_sales`.`cs_ship_cdemo_sk`, `catalog_sales`.`cs_ship_hdemo_sk`, `catalog_sales`.`cs_ship_addr_sk`, `catalog_sales`.`cs_call_center_sk`, `catalog_sales`.`cs_catalog_page_sk`, `catalog_sales`.`cs_ship_mode_sk`, `catalog_sales`.`cs_warehouse_sk`, `catalog_sales`.`cs_item_sk`, `catalog_sales`.`cs_promo_sk`, `catalog_sales`.`cs_order_number`, `catalog_sales`.`cs_quantity`, `catalog_sales`.`cs_wholesale_cost`, `catalog_sales`.`cs_list_price`, `catalog_sales`.`cs_sales_price`, `catalog_sales`.`cs_ext_discount_amt`, `catalog_sales`.`cs_ext_sales_price`, `catalog_sales`.`cs_ext_wholesale_cost`, `catalog_sales`.`cs_ext_list_price`, `catalog_sales`.`cs_ext_tax`, `catalog_sales`.`cs_coupon_amt`, `catalog_sales`.`cs_ext_ship_cost`, `catalog_sales`.`cs_net_paid`, `catalog_sales`.`cs_net_paid_inc_tax`, `catalog_sales`.`cs_net_paid_inc_ship`, `catalog_sales`.`cs_net_paid_inc_ship_tax`, `catalog_sales`.`cs_net_profit`, `date_dim`.`d_date_sk`, `date_dim`.`d_date_id`, `date_dim`.`d_date`, `date_dim`.`d_month_seq`, `date_dim`.`d_week_seq`, `date_dim`.`d_quarter_seq`, `date_dim`.`d_year`, `date_dim`.`d_dow`, `date_dim`.`d_moy`, `date_dim`.`d_dom`, `date_dim`.`d_qoy`, `date_dim`.`d_fy_year`, `date_dim`.`d_fy_quarter_seq`, `date_dim`.`d_fy_week_seq`, `date_dim`.`d_day_name`, `date_dim`.`d_quarter_name`, `date_dim`.`d_holiday`, `date_dim`.`d_weekend`, `date_dim`.`d_following_holiday`, `date_dim`.`d_first_dom`, `date_dim`.`d_last_dom`, `date_dim`.`d_same_day_ly`, `date_dim`.`d_same_day_lq`, `date_dim`.`d_current_day`, `date_dim`.`d_current_week`, `date_dim`.`d_current_month`, `date_dim`.`d_current_quarter`, `date_dim`.`d_current_year` FROM `catalog_sales` CROSS JOIN `date_dim` WHERE ((((`c`.`c_customer_sk` = `catalog_sales`.`cs_ship_customer_sk`) AND (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`)) AND (`date_dim`.`d_year` = 2002)) AND (`date_dim`.`d_moy` BETWEEN 3 AND (3 + 3)))))) AND `ca`.`ca_county` IN ('Clinton County', 'Platte County', 'Franklin County', 'Louisa County', 'Harmon County'))) JOIN `customer_demographics` ON (`customer_demographics`.`cd_demo_sk` = `c`.`c_current_cdemo_sk`) GROUP BY `customer_demographics`.`cd_gender`, `customer_demographics`.`cd_marital_status`, `customer_demographics`.`cd_education_status`, `customer_demographics`.`cd_purchase_estimate`, `customer_demographics`.`cd_credit_rating`, `customer_demographics`.`cd_dep_count`, `customer_demographics`.`cd_dep_employed_count`, `customer_demographics`.`cd_dep_college_count` ORDER BY `customer_demographics`.`cd_gender` ASC NULLS LAST, `customer_demographics`.`cd_marital_status` ASC NULLS LAST, `customer_demographics`.`cd_education_status` ASC NULLS LAST, `customer_demographics`.`cd_purchase_estimate` ASC NULLS LAST, `customer_demographics`.`cd_credit_rating` ASC NULLS LAST, `customer_demographics`.`cd_dep_count` ASC NULLS LAST, `customer_demographics`.`cd_dep_employed_count` ASC NULLS LAST, `customer_demographics`.`cd_dep_college_count` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q11_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q11_explain.snap new file mode 100644 index 0000000000..29798caa5d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q11_explain.snap @@ -0,0 +1,92 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q11" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: t_s_secyear.customer_id ASC NULLS LAST, t_s_secyear.customer_first_name ASC NULLS LAST, t_s_secyear.customer_last_name ASC NULLS LAST, t_s_secyear.customer_email_address ASC NULLS LAST | +| | Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address | +| | Inner Join: Filter: t_s_firstyear.customer_id = t_w_secyear.customer_id AND CASE WHEN t_w_firstyear.year_total > Int64(0) THEN t_w_secyear.year_total / t_w_firstyear.year_total ELSE Float64(0) END > CASE WHEN t_s_firstyear.year_total > Int64(0) THEN t_s_secyear.year_total / t_s_firstyear.year_total ELSE Float64(0) END | +| | Inner Join: Filter: t_s_firstyear.customer_id = t_w_firstyear.customer_id | +| | Inner Join: Filter: t_s_secyear.customer_id = t_s_firstyear.customer_id | +| | Filter: t_s_firstyear.sale_type = Utf8("s") AND t_s_firstyear.dyear = Int64(1999) AND t_s_firstyear.year_total > Int64(0) | +| | SubqueryAlias: t_s_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_s_secyear.sale_type = Utf8("s") AND t_s_secyear.dyear = Int64(1999) + Int64(1) | +| | SubqueryAlias: t_s_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_w_firstyear.sale_type = Utf8("w") AND t_w_firstyear.dyear = Int64(1999) AND t_w_firstyear.year_total > Int64(0) | +| | SubqueryAlias: t_w_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_w_secyear.sale_type = Utf8("w") AND t_w_secyear.dyear = Int64(1999) + Int64(1) | +| | SubqueryAlias: t_w_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address FROM (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum((store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum((web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_s_firstyear JOIN (SELECT customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum((store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum((web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_s_secyear ON (t_s_secyear.customer_id = t_s_firstyear.customer_id) JOIN (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum((store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum((web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_w_firstyear ON (t_s_firstyear.customer_id = t_w_firstyear.customer_id) JOIN (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum((store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum((web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_w_secyear ON ((t_s_firstyear.customer_id = t_w_secyear.customer_id) AND (CASE WHEN (t_w_firstyear.year_total > 0) THEN (t_w_secyear.year_total / t_w_firstyear.year_total) ELSE 0.0 END > CASE WHEN (t_s_firstyear.year_total > 0) THEN (t_s_secyear.year_total / t_s_firstyear.year_total) ELSE 0.0 END)) WHERE (((t_s_firstyear.sale_type = 's') AND (t_s_firstyear.dyear = 1999)) AND (t_s_firstyear.year_total > 0)) AND ((t_s_secyear.sale_type = 's') AND (t_s_secyear.dyear = (1999 + 1))) AND ((t_s_secyear.sale_type = 's') AND (t_s_secyear.dyear = (1999 + 1))) AND (((t_w_firstyear.sale_type = 'w') AND (t_w_firstyear.dyear = 1999)) AND (t_w_firstyear.year_total > 0)) AND (((t_w_firstyear.sale_type = 'w') AND (t_w_firstyear.dyear = 1999)) AND (t_w_firstyear.year_total > 0)) AND ((t_w_secyear.sale_type = 'w') AND (t_w_secyear.dyear = (1999 + 1))) AND ((t_w_secyear.sale_type = 'w') AND (t_w_secyear.dyear = (1999 + 1))) ORDER BY t_s_secyear.customer_id ASC NULLS LAST, t_s_secyear.customer_first_name ASC NULLS LAST, t_s_secyear.customer_last_name ASC NULLS LAST, t_s_secyear.customer_email_address ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `t_s_secyear`.`customer_id`, `t_s_secyear`.`customer_first_name`, `t_s_secyear`.`customer_last_name`, `t_s_secyear`.`customer_email_address` FROM (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_discount_amt`)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_discount_amt`)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_s_firstyear` JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `customer`.`c_first_name` AS `customer_first_name`, `customer`.`c_last_name` AS `customer_last_name`, `customer`.`c_email_address` AS `customer_email_address`, `date_dim`.`d_year` AS `dyear`, sum((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_discount_amt`)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `customer`.`c_first_name` AS `customer_first_name`, `customer`.`c_last_name` AS `customer_last_name`, `customer`.`c_email_address` AS `customer_email_address`, `date_dim`.`d_year` AS `dyear`, sum((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_discount_amt`)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_s_secyear` ON (`t_s_secyear`.`customer_id` = `t_s_firstyear`.`customer_id`) JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_discount_amt`)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_discount_amt`)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_w_firstyear` ON (`t_s_firstyear`.`customer_id` = `t_w_firstyear`.`customer_id`) JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_discount_amt`)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_discount_amt`)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_w_secyear` ON ((`t_s_firstyear`.`customer_id` = `t_w_secyear`.`customer_id`) AND (CASE WHEN (`t_w_firstyear`.`year_total` > 0) THEN (`t_w_secyear`.`year_total` / `t_w_firstyear`.`year_total`) ELSE 0.0 END > CASE WHEN (`t_s_firstyear`.`year_total` > 0) THEN (`t_s_secyear`.`year_total` / `t_s_firstyear`.`year_total`) ELSE 0.0 END)) WHERE (((`t_s_firstyear`.`sale_type` = 's') AND (`t_s_firstyear`.`dyear` = 1999)) AND (`t_s_firstyear`.`year_total` > 0)) AND ((`t_s_secyear`.`sale_type` = 's') AND (`t_s_secyear`.`dyear` = (1999 + 1))) AND ((`t_s_secyear`.`sale_type` = 's') AND (`t_s_secyear`.`dyear` = (1999 + 1))) AND (((`t_w_firstyear`.`sale_type` = 'w') AND (`t_w_firstyear`.`dyear` = 1999)) AND (`t_w_firstyear`.`year_total` > 0)) AND (((`t_w_firstyear`.`sale_type` = 'w') AND (`t_w_firstyear`.`dyear` = 1999)) AND (`t_w_firstyear`.`year_total` > 0)) AND ((`t_w_secyear`.`sale_type` = 'w') AND (`t_w_secyear`.`dyear` = (1999 + 1))) AND ((`t_w_secyear`.`sale_type` = 'w') AND (`t_w_secyear`.`dyear` = (1999 + 1))) ORDER BY `t_s_secyear`.`customer_id` ASC NULLS LAST, `t_s_secyear`.`customer_first_name` ASC NULLS LAST, `t_s_secyear`.`customer_last_name` ASC NULLS LAST, `t_s_secyear`.`customer_email_address` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q12_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q12_explain.snap new file mode 100644 index 0000000000..e7bb3e77db --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q12_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q12" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST | +| | Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(web_sales.ws_ext_sales_price) AS itemrevenue, sum(web_sales.ws_ext_sales_price) * Int64(100) / sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS revenueratio | +| | WindowAggr: windowExpr=[[sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: web_sales.ws_item_sk = item.i_item_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], full_filters=[item.i_category IN ([Utf8("Jewelry"), Utf8("Books"), Utf8("Women")])] | +| | Filter: date_dim.d_date BETWEEN CAST(Utf8("2002-03-22") AS Date32) AND CAST(Utf8("2002-03-22") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 30, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(web_sales.ws_ext_sales_price) AS itemrevenue, ((sum(web_sales.ws_ext_sales_price) * 100) / sum(sum(web_sales.ws_ext_sales_price)) OVER (PARTITION BY item.i_class ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS revenueratio FROM web_sales JOIN item ON ((web_sales.ws_item_sk = item.i_item_sk) AND item.i_category IN ('Jewelry', 'Books', 'Women')) JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_date BETWEEN CAST('2002-03-22' AS DATE) AND (CAST('2002-03-22' AS DATE) + INTERVAL '30 DAYS'))) GROUP BY item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price ORDER BY item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_category`, `item`.`i_class`, `item`.`i_current_price`, sum(`web_sales`.`ws_ext_sales_price`) AS `itemrevenue`, ((sum(`web_sales`.`ws_ext_sales_price`) * 100) / sum(sum(`web_sales`.`ws_ext_sales_price`)) OVER (PARTITION BY `item`.`i_class` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS `revenueratio` FROM `web_sales` JOIN `item` ON ((`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) AND `item`.`i_category` IN ('Jewelry', 'Books', 'Women')) JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_date` BETWEEN CAST('2002-03-22' AS TEXT) AND (CAST(date(CAST('2002-03-22' AS TEXT), '+30 days') AS TEXT)))) GROUP BY `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_category`, `item`.`i_class`, `item`.`i_current_price` ORDER BY `item`.`i_category` ASC NULLS LAST, `item`.`i_class` ASC NULLS LAST, `item`.`i_item_id` ASC NULLS LAST, `item`.`i_item_desc` ASC NULLS LAST, `revenueratio` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q13_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q13_explain.snap new file mode 100644 index 0000000000..76af8c3982 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q13_explain.snap @@ -0,0 +1,28 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q13" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: avg(store_sales.ss_quantity), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_quantity), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk AND customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("CO"), Utf8("MI"), Utf8("MN")]) AND store_sales.ss_net_profit BETWEEN Int64(100) AND Int64(200) OR store_sales.ss_addr_sk = customer_address.ca_address_sk AND customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("NC"), Utf8("NY"), Utf8("TX")]) AND store_sales.ss_net_profit BETWEEN Int64(150) AND Int64(300) OR store_sales.ss_addr_sk = customer_address.ca_address_sk AND customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("CA"), Utf8("NE"), Utf8("TN")]) AND store_sales.ss_net_profit BETWEEN Int64(50) AND Int64(250) | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk AND customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("U") AND customer_demographics.cd_education_status = Utf8("4 yr Degree") AND store_sales.ss_sales_price BETWEEN Float64(100) AND Float64(150) AND household_demographics.hd_dep_count = Int64(3) OR store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk AND customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("S") AND customer_demographics.cd_education_status = Utf8("Unknown") AND store_sales.ss_sales_price BETWEEN Float64(50) AND Float64(100) AND household_demographics.hd_dep_count = Int64(1) OR store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk AND customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("D") AND customer_demographics.cd_education_status = Utf8("2 yr Degree") AND store_sales.ss_sales_price BETWEEN Float64(150) AND Float64(200) AND household_demographics.hd_dep_count = Int64(1) | +| | Inner Join: Filter: customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("U") AND customer_demographics.cd_education_status = Utf8("4 yr Degree") AND store_sales.ss_sales_price BETWEEN Float64(100) AND Float64(150) OR customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("S") AND customer_demographics.cd_education_status = Utf8("Unknown") AND store_sales.ss_sales_price BETWEEN Float64(50) AND Float64(100) OR customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("D") AND customer_demographics.cd_education_status = Utf8("2 yr Degree") AND store_sales.ss_sales_price BETWEEN Float64(150) AND Float64(200) | +| | Inner Join: Filter: store.s_store_sk = store_sales.ss_store_sk | +| | Filter: (store_sales.ss_net_profit BETWEEN Int64(100) AND Int64(200) OR store_sales.ss_net_profit BETWEEN Int64(150) AND Int64(300) OR store_sales.ss_net_profit BETWEEN Int64(50) AND Int64(250)) AND (store_sales.ss_sales_price BETWEEN Float64(100) AND Float64(150) OR store_sales.ss_sales_price BETWEEN Float64(50) AND Float64(100) OR store_sales.ss_sales_price BETWEEN Float64(150) AND Float64(200)) | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_ext_sales_price, ss_ext_wholesale_cost, ss_net_profit] | +| | TableScan: store projection=[s_store_sk] | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], full_filters=[customer_demographics.cd_marital_status = Utf8("U") AND customer_demographics.cd_education_status = Utf8("4 yr Degree") OR customer_demographics.cd_marital_status = Utf8("S") AND customer_demographics.cd_education_status = Utf8("Unknown") OR customer_demographics.cd_marital_status = Utf8("D") AND customer_demographics.cd_education_status = Utf8("2 yr Degree")] | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count], full_filters=[household_demographics.hd_dep_count = Int64(3) OR household_demographics.hd_dep_count = Int64(1) OR household_demographics.hd_dep_count = Int64(1)] | +| | TableScan: customer_address projection=[ca_address_sk, ca_state, ca_country], full_filters=[customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("CO"), Utf8("MI"), Utf8("MN")]) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("NC"), Utf8("NY"), Utf8("TX")]) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("CA"), Utf8("NE"), Utf8("TN")])] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2001)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT avg(store_sales.ss_quantity), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost) FROM store_sales JOIN store ON ((store.s_store_sk = store_sales.ss_store_sk) AND ((((store_sales.ss_net_profit BETWEEN 100 AND 200) OR (store_sales.ss_net_profit BETWEEN 150 AND 300)) OR (store_sales.ss_net_profit BETWEEN 50 AND 250)) AND (((store_sales.ss_sales_price BETWEEN 100.0 AND 150.0) OR (store_sales.ss_sales_price BETWEEN 50.0 AND 100.0)) OR (store_sales.ss_sales_price BETWEEN 150.0 AND 200.0)))) JOIN customer_demographics ON (((((((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk) AND (customer_demographics.cd_marital_status = 'U')) AND (customer_demographics.cd_education_status = '4 yr Degree')) AND (store_sales.ss_sales_price BETWEEN 100.0 AND 150.0)) OR ((((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk) AND (customer_demographics.cd_marital_status = 'S')) AND (customer_demographics.cd_education_status = 'Unknown')) AND (store_sales.ss_sales_price BETWEEN 50.0 AND 100.0))) OR ((((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk) AND (customer_demographics.cd_marital_status = 'D')) AND (customer_demographics.cd_education_status = '2 yr Degree')) AND (store_sales.ss_sales_price BETWEEN 150.0 AND 200.0))) AND ((((customer_demographics.cd_marital_status = 'U') AND (customer_demographics.cd_education_status = '4 yr Degree')) OR ((customer_demographics.cd_marital_status = 'S') AND (customer_demographics.cd_education_status = 'Unknown'))) OR ((customer_demographics.cd_marital_status = 'D') AND (customer_demographics.cd_education_status = '2 yr Degree')))) JOIN household_demographics ON (((((((((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND (customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk)) AND (customer_demographics.cd_marital_status = 'U')) AND (customer_demographics.cd_education_status = '4 yr Degree')) AND (store_sales.ss_sales_price BETWEEN 100.0 AND 150.0)) AND (household_demographics.hd_dep_count = 3)) OR ((((((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND (customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk)) AND (customer_demographics.cd_marital_status = 'S')) AND (customer_demographics.cd_education_status = 'Unknown')) AND (store_sales.ss_sales_price BETWEEN 50.0 AND 100.0)) AND (household_demographics.hd_dep_count = 1))) OR ((((((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND (customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk)) AND (customer_demographics.cd_marital_status = 'D')) AND (customer_demographics.cd_education_status = '2 yr Degree')) AND (store_sales.ss_sales_price BETWEEN 150.0 AND 200.0)) AND (household_demographics.hd_dep_count = 1))) AND (((household_demographics.hd_dep_count = 3) OR (household_demographics.hd_dep_count = 1)) OR (household_demographics.hd_dep_count = 1))) JOIN customer_address ON (((((((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_country = 'United States')) AND customer_address.ca_state IN ('CO', 'MI', 'MN')) AND (store_sales.ss_net_profit BETWEEN 100 AND 200)) OR ((((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_country = 'United States')) AND customer_address.ca_state IN ('NC', 'NY', 'TX')) AND (store_sales.ss_net_profit BETWEEN 150 AND 300))) OR ((((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_country = 'United States')) AND customer_address.ca_state IN ('CA', 'NE', 'TN')) AND (store_sales.ss_net_profit BETWEEN 50 AND 250))) AND ((((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('CO', 'MI', 'MN')) OR ((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('NC', 'NY', 'TX'))) OR ((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('CA', 'NE', 'TN')))) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2001)) rewritten_sql=SELECT avg(`store_sales`.`ss_quantity`), avg(`store_sales`.`ss_ext_sales_price`), avg(`store_sales`.`ss_ext_wholesale_cost`), sum(`store_sales`.`ss_ext_wholesale_cost`) FROM `store_sales` JOIN `store` ON ((`store`.`s_store_sk` = `store_sales`.`ss_store_sk`) AND ((((`store_sales`.`ss_net_profit` BETWEEN 100 AND 200) OR (`store_sales`.`ss_net_profit` BETWEEN 150 AND 300)) OR (`store_sales`.`ss_net_profit` BETWEEN 50 AND 250)) AND (((`store_sales`.`ss_sales_price` BETWEEN 100.0 AND 150.0) OR (`store_sales`.`ss_sales_price` BETWEEN 50.0 AND 100.0)) OR (`store_sales`.`ss_sales_price` BETWEEN 150.0 AND 200.0)))) JOIN `customer_demographics` ON (((((((`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`) AND (`customer_demographics`.`cd_marital_status` = 'U')) AND (`customer_demographics`.`cd_education_status` = '4 yr Degree')) AND (`store_sales`.`ss_sales_price` BETWEEN 100.0 AND 150.0)) OR ((((`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`) AND (`customer_demographics`.`cd_marital_status` = 'S')) AND (`customer_demographics`.`cd_education_status` = 'Unknown')) AND (`store_sales`.`ss_sales_price` BETWEEN 50.0 AND 100.0))) OR ((((`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`) AND (`customer_demographics`.`cd_marital_status` = 'D')) AND (`customer_demographics`.`cd_education_status` = '2 yr Degree')) AND (`store_sales`.`ss_sales_price` BETWEEN 150.0 AND 200.0))) AND ((((`customer_demographics`.`cd_marital_status` = 'U') AND (`customer_demographics`.`cd_education_status` = '4 yr Degree')) OR ((`customer_demographics`.`cd_marital_status` = 'S') AND (`customer_demographics`.`cd_education_status` = 'Unknown'))) OR ((`customer_demographics`.`cd_marital_status` = 'D') AND (`customer_demographics`.`cd_education_status` = '2 yr Degree')))) JOIN `household_demographics` ON (((((((((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`)) AND (`customer_demographics`.`cd_marital_status` = 'U')) AND (`customer_demographics`.`cd_education_status` = '4 yr Degree')) AND (`store_sales`.`ss_sales_price` BETWEEN 100.0 AND 150.0)) AND (`household_demographics`.`hd_dep_count` = 3)) OR ((((((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`)) AND (`customer_demographics`.`cd_marital_status` = 'S')) AND (`customer_demographics`.`cd_education_status` = 'Unknown')) AND (`store_sales`.`ss_sales_price` BETWEEN 50.0 AND 100.0)) AND (`household_demographics`.`hd_dep_count` = 1))) OR ((((((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`)) AND (`customer_demographics`.`cd_marital_status` = 'D')) AND (`customer_demographics`.`cd_education_status` = '2 yr Degree')) AND (`store_sales`.`ss_sales_price` BETWEEN 150.0 AND 200.0)) AND (`household_demographics`.`hd_dep_count` = 1))) AND (((`household_demographics`.`hd_dep_count` = 3) OR (`household_demographics`.`hd_dep_count` = 1)) OR (`household_demographics`.`hd_dep_count` = 1))) JOIN `customer_address` ON (((((((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_country` = 'United States')) AND `customer_address`.`ca_state` IN ('CO', 'MI', 'MN')) AND (`store_sales`.`ss_net_profit` BETWEEN 100 AND 200)) OR ((((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_country` = 'United States')) AND `customer_address`.`ca_state` IN ('NC', 'NY', 'TX')) AND (`store_sales`.`ss_net_profit` BETWEEN 150 AND 300))) OR ((((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_country` = 'United States')) AND `customer_address`.`ca_state` IN ('CA', 'NE', 'TN')) AND (`store_sales`.`ss_net_profit` BETWEEN 50 AND 250))) AND ((((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('CO', 'MI', 'MN')) OR ((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('NC', 'NY', 'TX'))) OR ((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('CA', 'NE', 'TN')))) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2001)) | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q15_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q15_explain.snap new file mode 100644 index 0000000000..b26a818112 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q15_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q15" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer_address.ca_zip ASC NULLS LAST | +| | Projection: customer_address.ca_zip, sum(catalog_sales.cs_sales_price) | +| | Aggregate: groupBy=[[customer_address.ca_zip]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_current_addr_sk = customer_address.ca_address_sk AND (substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([Utf8("85669"), Utf8("86197"), Utf8("88274"), Utf8("83405"), Utf8("86475"), Utf8("85392"), Utf8("85460"), Utf8("80348"), Utf8("81792")]) OR customer_address.ca_state IN ([Utf8("CA"), Utf8("WA"), Utf8("GA")]) OR catalog_sales.cs_sales_price > Int64(500)) | +| | Inner Join: Filter: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_sales_price] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | TableScan: customer_address projection=[ca_address_sk, ca_state, ca_zip] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_qoy = Int64(2), date_dim.d_year = Int64(2002)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer_address.ca_zip, sum(catalog_sales.cs_sales_price) FROM catalog_sales JOIN customer ON (catalog_sales.cs_bill_customer_sk = customer.c_customer_sk) JOIN customer_address ON ((customer.c_current_addr_sk = customer_address.ca_address_sk) AND ((substr(customer_address.ca_zip, 1, 5) IN ('85669', '86197', '88274', '83405', '86475', '85392', '85460', '80348', '81792') OR customer_address.ca_state IN ('CA', 'WA', 'GA')) OR (catalog_sales.cs_sales_price > 500))) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_qoy = 2) AND (date_dim.d_year = 2002))) GROUP BY customer_address.ca_zip ORDER BY customer_address.ca_zip ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer_address`.`ca_zip`, sum(`catalog_sales`.`cs_sales_price`) FROM `catalog_sales` JOIN `customer` ON (`catalog_sales`.`cs_bill_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` ON ((`customer`.`c_current_addr_sk` = `customer_address`.`ca_address_sk`) AND ((substr(`customer_address`.`ca_zip`, 1, 5) IN ('85669', '86197', '88274', '83405', '86475', '85392', '85460', '80348', '81792') OR `customer_address`.`ca_state` IN ('CA', 'WA', 'GA')) OR (`catalog_sales`.`cs_sales_price` > 500))) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_qoy` = 2) AND (`date_dim`.`d_year` = 2002))) GROUP BY `customer_address`.`ca_zip` ORDER BY `customer_address`.`ca_zip` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q16_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q16_explain.snap new file mode 100644 index 0000000000..abdb24678a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q16_explain.snap @@ -0,0 +1,39 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q16" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: order count, total shipping cost, total net profit | +| | Sort: count(DISTINCT cs1.cs_order_number) AS order count ASC NULLS LAST | +| | Projection: count(DISTINCT cs1.cs_order_number) AS order count, sum(cs1.cs_ext_ship_cost) AS total shipping cost, sum(cs1.cs_net_profit) AS total net profit, count(DISTINCT cs1.cs_order_number) | +| | Aggregate: groupBy=[[]], aggr=[[count(DISTINCT cs1.cs_order_number), sum(cs1.cs_ext_ship_cost), sum(cs1.cs_net_profit)]] | +| | Inner Join: Filter: cs1.cs_call_center_sk = call_center.cc_call_center_sk | +| | Inner Join: Filter: cs1.cs_ship_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: cs1.cs_ship_date_sk = date_dim.d_date_sk | +| | Filter: EXISTS () AND NOT EXISTS () | +| | Subquery: | +| | Projection: cs2.cs_sold_date_sk, cs2.cs_sold_time_sk, cs2.cs_ship_date_sk, cs2.cs_bill_customer_sk, cs2.cs_bill_cdemo_sk, cs2.cs_bill_hdemo_sk, cs2.cs_bill_addr_sk, cs2.cs_ship_customer_sk, cs2.cs_ship_cdemo_sk, cs2.cs_ship_hdemo_sk, cs2.cs_ship_addr_sk, cs2.cs_call_center_sk, cs2.cs_catalog_page_sk, cs2.cs_ship_mode_sk, cs2.cs_warehouse_sk, cs2.cs_item_sk, cs2.cs_promo_sk, cs2.cs_order_number, cs2.cs_quantity, cs2.cs_wholesale_cost, cs2.cs_list_price, cs2.cs_sales_price, cs2.cs_ext_discount_amt, cs2.cs_ext_sales_price, cs2.cs_ext_wholesale_cost, cs2.cs_ext_list_price, cs2.cs_ext_tax, cs2.cs_coupon_amt, cs2.cs_ext_ship_cost, cs2.cs_net_paid, cs2.cs_net_paid_inc_tax, cs2.cs_net_paid_inc_ship, cs2.cs_net_paid_inc_ship_tax, cs2.cs_net_profit | +| | Filter: outer_ref(cs1.cs_order_number) = cs2.cs_order_number AND outer_ref(cs1.cs_warehouse_sk) != cs2.cs_warehouse_sk | +| | SubqueryAlias: cs2 | +| | TableScan: catalog_sales | +| | Subquery: | +| | Projection: cr1.cr_returned_date_sk, cr1.cr_returned_time_sk, cr1.cr_item_sk, cr1.cr_refunded_customer_sk, cr1.cr_refunded_cdemo_sk, cr1.cr_refunded_hdemo_sk, cr1.cr_refunded_addr_sk, cr1.cr_returning_customer_sk, cr1.cr_returning_cdemo_sk, cr1.cr_returning_hdemo_sk, cr1.cr_returning_addr_sk, cr1.cr_call_center_sk, cr1.cr_catalog_page_sk, cr1.cr_ship_mode_sk, cr1.cr_warehouse_sk, cr1.cr_reason_sk, cr1.cr_order_number, cr1.cr_return_quantity, cr1.cr_return_amount, cr1.cr_return_tax, cr1.cr_return_amt_inc_tax, cr1.cr_fee, cr1.cr_return_ship_cost, cr1.cr_refunded_cash, cr1.cr_reversed_charge, cr1.cr_store_credit, cr1.cr_net_loss | +| | Filter: outer_ref(cs1.cs_order_number) = cr1.cr_order_number | +| | SubqueryAlias: cr1 | +| | TableScan: catalog_returns | +| | SubqueryAlias: cs1 | +| | TableScan: catalog_sales projection=[cs_ship_date_sk, cs_ship_addr_sk, cs_call_center_sk, cs_warehouse_sk, cs_order_number, cs_ext_ship_cost, cs_net_profit] | +| | Filter: date_dim.d_date BETWEEN Utf8("1999-5-01") AND CAST(Utf8("1999-5-01") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 60, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = Utf8("ID")] | +| | TableScan: call_center projection=[cc_call_center_sk], full_filters=[call_center.cc_county IN ([Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County")])] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT "order count", "total shipping cost", "total net profit" FROM (SELECT count(DISTINCT cs1.cs_order_number) AS "order count", sum(cs1.cs_ext_ship_cost) AS "total shipping cost", sum(cs1.cs_net_profit) AS "total net profit", count(DISTINCT cs1.cs_order_number) FROM catalog_sales AS cs1 JOIN date_dim ON ((cs1.cs_ship_date_sk = date_dim.d_date_sk) AND ((EXISTS (SELECT cs2.cs_sold_date_sk, cs2.cs_sold_time_sk, cs2.cs_ship_date_sk, cs2.cs_bill_customer_sk, cs2.cs_bill_cdemo_sk, cs2.cs_bill_hdemo_sk, cs2.cs_bill_addr_sk, cs2.cs_ship_customer_sk, cs2.cs_ship_cdemo_sk, cs2.cs_ship_hdemo_sk, cs2.cs_ship_addr_sk, cs2.cs_call_center_sk, cs2.cs_catalog_page_sk, cs2.cs_ship_mode_sk, cs2.cs_warehouse_sk, cs2.cs_item_sk, cs2.cs_promo_sk, cs2.cs_order_number, cs2.cs_quantity, cs2.cs_wholesale_cost, cs2.cs_list_price, cs2.cs_sales_price, cs2.cs_ext_discount_amt, cs2.cs_ext_sales_price, cs2.cs_ext_wholesale_cost, cs2.cs_ext_list_price, cs2.cs_ext_tax, cs2.cs_coupon_amt, cs2.cs_ext_ship_cost, cs2.cs_net_paid, cs2.cs_net_paid_inc_tax, cs2.cs_net_paid_inc_ship, cs2.cs_net_paid_inc_ship_tax, cs2.cs_net_profit FROM catalog_sales AS cs2 WHERE ((cs1.cs_order_number = cs2.cs_order_number) AND (cs1.cs_warehouse_sk <> cs2.cs_warehouse_sk))) AND NOT EXISTS (SELECT cr1.cr_returned_date_sk, cr1.cr_returned_time_sk, cr1.cr_item_sk, cr1.cr_refunded_customer_sk, cr1.cr_refunded_cdemo_sk, cr1.cr_refunded_hdemo_sk, cr1.cr_refunded_addr_sk, cr1.cr_returning_customer_sk, cr1.cr_returning_cdemo_sk, cr1.cr_returning_hdemo_sk, cr1.cr_returning_addr_sk, cr1.cr_call_center_sk, cr1.cr_catalog_page_sk, cr1.cr_ship_mode_sk, cr1.cr_warehouse_sk, cr1.cr_reason_sk, cr1.cr_order_number, cr1.cr_return_quantity, cr1.cr_return_amount, cr1.cr_return_tax, cr1.cr_return_amt_inc_tax, cr1.cr_fee, cr1.cr_return_ship_cost, cr1.cr_refunded_cash, cr1.cr_reversed_charge, cr1.cr_store_credit, cr1.cr_net_loss FROM catalog_returns AS cr1 WHERE (cs1.cs_order_number = cr1.cr_order_number))) AND (date_dim.d_date BETWEEN '1999-5-01' AND (CAST('1999-5-01' AS DATE) + INTERVAL '60 DAYS')))) JOIN customer_address ON ((cs1.cs_ship_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_state = 'ID')) JOIN call_center ON ((cs1.cs_call_center_sk = call_center.cc_call_center_sk) AND call_center.cc_county IN ('Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County')) ORDER BY count(DISTINCT cs1.cs_order_number) ASC NULLS LAST) LIMIT 100 rewritten_sql=SELECT `order count`, `total shipping cost`, `total net profit` FROM (SELECT count(DISTINCT `cs1`.`cs_order_number`) AS `order count`, sum(`cs1`.`cs_ext_ship_cost`) AS `total shipping cost`, sum(`cs1`.`cs_net_profit`) AS `total net profit`, count(DISTINCT `cs1`.`cs_order_number`) FROM `catalog_sales` AS `cs1` JOIN `date_dim` ON ((`cs1`.`cs_ship_date_sk` = `date_dim`.`d_date_sk`) AND ((EXISTS (SELECT `cs2`.`cs_sold_date_sk`, `cs2`.`cs_sold_time_sk`, `cs2`.`cs_ship_date_sk`, `cs2`.`cs_bill_customer_sk`, `cs2`.`cs_bill_cdemo_sk`, `cs2`.`cs_bill_hdemo_sk`, `cs2`.`cs_bill_addr_sk`, `cs2`.`cs_ship_customer_sk`, `cs2`.`cs_ship_cdemo_sk`, `cs2`.`cs_ship_hdemo_sk`, `cs2`.`cs_ship_addr_sk`, `cs2`.`cs_call_center_sk`, `cs2`.`cs_catalog_page_sk`, `cs2`.`cs_ship_mode_sk`, `cs2`.`cs_warehouse_sk`, `cs2`.`cs_item_sk`, `cs2`.`cs_promo_sk`, `cs2`.`cs_order_number`, `cs2`.`cs_quantity`, `cs2`.`cs_wholesale_cost`, `cs2`.`cs_list_price`, `cs2`.`cs_sales_price`, `cs2`.`cs_ext_discount_amt`, `cs2`.`cs_ext_sales_price`, `cs2`.`cs_ext_wholesale_cost`, `cs2`.`cs_ext_list_price`, `cs2`.`cs_ext_tax`, `cs2`.`cs_coupon_amt`, `cs2`.`cs_ext_ship_cost`, `cs2`.`cs_net_paid`, `cs2`.`cs_net_paid_inc_tax`, `cs2`.`cs_net_paid_inc_ship`, `cs2`.`cs_net_paid_inc_ship_tax`, `cs2`.`cs_net_profit` FROM `catalog_sales` AS `cs2` WHERE ((`cs1`.`cs_order_number` = `cs2`.`cs_order_number`) AND (`cs1`.`cs_warehouse_sk` <> `cs2`.`cs_warehouse_sk`))) AND NOT EXISTS (SELECT `cr1`.`cr_returned_date_sk`, `cr1`.`cr_returned_time_sk`, `cr1`.`cr_item_sk`, `cr1`.`cr_refunded_customer_sk`, `cr1`.`cr_refunded_cdemo_sk`, `cr1`.`cr_refunded_hdemo_sk`, `cr1`.`cr_refunded_addr_sk`, `cr1`.`cr_returning_customer_sk`, `cr1`.`cr_returning_cdemo_sk`, `cr1`.`cr_returning_hdemo_sk`, `cr1`.`cr_returning_addr_sk`, `cr1`.`cr_call_center_sk`, `cr1`.`cr_catalog_page_sk`, `cr1`.`cr_ship_mode_sk`, `cr1`.`cr_warehouse_sk`, `cr1`.`cr_reason_sk`, `cr1`.`cr_order_number`, `cr1`.`cr_return_quantity`, `cr1`.`cr_return_amount`, `cr1`.`cr_return_tax`, `cr1`.`cr_return_amt_inc_tax`, `cr1`.`cr_fee`, `cr1`.`cr_return_ship_cost`, `cr1`.`cr_refunded_cash`, `cr1`.`cr_reversed_charge`, `cr1`.`cr_store_credit`, `cr1`.`cr_net_loss` FROM `catalog_returns` AS `cr1` WHERE (`cs1`.`cs_order_number` = `cr1`.`cr_order_number`))) AND (`date_dim`.`d_date` BETWEEN '1999-5-01' AND (CAST(date(CAST('1999-5-01' AS TEXT), '+60 days') AS TEXT))))) JOIN `customer_address` ON ((`cs1`.`cs_ship_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_state` = 'ID')) JOIN `call_center` ON ((`cs1`.`cs_call_center_sk` = `call_center`.`cc_call_center_sk`) AND `call_center`.`cc_county` IN ('Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County')) ORDER BY count(DISTINCT `cs1`.`cs_order_number`) ASC NULLS LAST) LIMIT 100 | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q19_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q19_explain.snap new file mode 100644 index 0000000000..2cd8d42ad4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q19_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q19" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: brand_id, brand, item.i_manufact_id, item.i_manufact, ext_price | +| | Sort: ext_price DESC NULLS FIRST, item.i_brand ASC NULLS LAST, item.i_brand_id ASC NULLS LAST, item.i_manufact_id ASC NULLS LAST, item.i_manufact ASC NULLS LAST | +| | Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, item.i_manufact_id, item.i_manufact, sum(store_sales.ss_ext_sales_price) AS ext_price, item.i_brand, item.i_brand_id | +| | Aggregate: groupBy=[[item.i_brand, item.i_brand_id, item.i_manufact_id, item.i_manufact]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) != substr(store.s_zip, Int64(1), Int64(5)) AND store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(1999)] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand, i_manufact_id, i_manufact], full_filters=[item.i_manager_id = Int64(8)] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | TableScan: customer_address projection=[ca_address_sk, ca_zip] | +| | TableScan: store projection=[s_store_sk, s_zip] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_brand_id AS brand_id, item.i_brand AS brand, item.i_manufact_id, item.i_manufact, sum(store_sales.ss_ext_sales_price) AS ext_price FROM date_dim JOIN store_sales ON ((date_dim.d_date_sk = store_sales.ss_sold_date_sk) AND ((date_dim.d_moy = 11) AND (date_dim.d_year = 1999))) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (item.i_manager_id = 8)) JOIN customer ON (store_sales.ss_customer_sk = customer.c_customer_sk) JOIN customer_address ON (customer.c_current_addr_sk = customer_address.ca_address_sk) JOIN store ON ((substr(customer_address.ca_zip, 1, 5) <> substr(store.s_zip, 1, 5)) AND (store_sales.ss_store_sk = store.s_store_sk)) GROUP BY item.i_brand, item.i_brand_id, item.i_manufact_id, item.i_manufact ORDER BY ext_price DESC NULLS FIRST, item.i_brand ASC NULLS LAST, item.i_brand_id ASC NULLS LAST, item.i_manufact_id ASC NULLS LAST, item.i_manufact ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_brand_id` AS `brand_id`, `item`.`i_brand` AS `brand`, `item`.`i_manufact_id`, `item`.`i_manufact`, sum(`store_sales`.`ss_ext_sales_price`) AS `ext_price` FROM `date_dim` JOIN `store_sales` ON ((`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND ((`date_dim`.`d_moy` = 11) AND (`date_dim`.`d_year` = 1999))) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_manager_id` = 8)) JOIN `customer` ON (`store_sales`.`ss_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` ON (`customer`.`c_current_addr_sk` = `customer_address`.`ca_address_sk`) JOIN `store` ON ((substr(`customer_address`.`ca_zip`, 1, 5) <> substr(`store`.`s_zip`, 1, 5)) AND (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`)) GROUP BY `item`.`i_brand`, `item`.`i_brand_id`, `item`.`i_manufact_id`, `item`.`i_manufact` ORDER BY `ext_price` DESC NULLS FIRST, `item`.`i_brand` ASC NULLS LAST, `item`.`i_brand_id` ASC NULLS LAST, `item`.`i_manufact_id` ASC NULLS LAST, `item`.`i_manufact` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q1_explain.snap new file mode 100644 index 0000000000..684d67fc20 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q1_explain.snap @@ -0,0 +1,41 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q1" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer.c_customer_id ASC NULLS LAST | +| | Projection: customer.c_customer_id | +| | Inner Join: Filter: ctr1.ctr_customer_sk = customer.c_customer_sk | +| | Inner Join: Filter: store.s_store_sk = ctr1.ctr_store_sk | +| | Filter: ctr1.ctr_total_return > () | +| | Subquery: | +| | Projection: avg(ctr2.ctr_total_return) * Float64(1.2) | +| | Aggregate: groupBy=[[]], aggr=[[avg(ctr2.ctr_total_return)]] | +| | Filter: outer_ref(ctr1.ctr_store_sk) = ctr2.ctr_store_sk | +| | SubqueryAlias: ctr2 | +| | SubqueryAlias: customer_total_return | +| | Projection: store_returns.sr_customer_sk AS ctr_customer_sk, store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[store_returns.sr_customer_sk, store_returns.sr_store_sk]], aggr=[[sum(store_returns.sr_return_amt_inc_tax)]] | +| | Filter: store_returns.sr_returned_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(1999) | +| | Cross Join: | +| | TableScan: store_returns | +| | TableScan: date_dim | +| | SubqueryAlias: ctr1 | +| | SubqueryAlias: customer_total_return | +| | Projection: store_returns.sr_customer_sk AS ctr_customer_sk, store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[store_returns.sr_customer_sk, store_returns.sr_store_sk]], aggr=[[sum(store_returns.sr_return_amt_inc_tax)]] | +| | Inner Join: Filter: store_returns.sr_returned_date_sk = date_dim.d_date_sk | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt_inc_tax] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1999)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_state = Utf8("TN")] | +| | TableScan: customer projection=[c_customer_sk, c_customer_id] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_customer_id FROM (SELECT store_returns.sr_customer_sk AS ctr_customer_sk, store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax) AS ctr_total_return FROM store_returns JOIN date_dim ON ((store_returns.sr_returned_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 1999)) GROUP BY store_returns.sr_customer_sk, store_returns.sr_store_sk) AS ctr1 JOIN store ON ((store.s_store_sk = ctr1.ctr_store_sk) AND (store.s_state = 'TN')) JOIN customer ON (ctr1.ctr_customer_sk = customer.c_customer_sk) WHERE (ctr1.ctr_total_return > (SELECT (avg(ctr2.ctr_total_return) * 1.2) FROM (SELECT store_returns.sr_customer_sk AS ctr_customer_sk, store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax) AS ctr_total_return FROM store_returns CROSS JOIN date_dim WHERE ((store_returns.sr_returned_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 1999)) GROUP BY store_returns.sr_customer_sk, store_returns.sr_store_sk) AS ctr2 WHERE (ctr1.ctr_store_sk = ctr2.ctr_store_sk))) ORDER BY customer.c_customer_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer`.`c_customer_id` FROM (SELECT `store_returns`.`sr_customer_sk` AS `ctr_customer_sk`, `store_returns`.`sr_store_sk` AS `ctr_store_sk`, sum(`store_returns`.`sr_return_amt_inc_tax`) AS `ctr_total_return` FROM `store_returns` JOIN `date_dim` ON ((`store_returns`.`sr_returned_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 1999)) GROUP BY `store_returns`.`sr_customer_sk`, `store_returns`.`sr_store_sk`) AS `ctr1` JOIN `store` ON ((`store`.`s_store_sk` = `ctr1`.`ctr_store_sk`) AND (`store`.`s_state` = 'TN')) JOIN `customer` ON (`ctr1`.`ctr_customer_sk` = `customer`.`c_customer_sk`) WHERE (`ctr1`.`ctr_total_return` > (SELECT (avg(`ctr2`.`ctr_total_return`) * 1.2) FROM (SELECT `store_returns`.`sr_customer_sk` AS `ctr_customer_sk`, `store_returns`.`sr_store_sk` AS `ctr_store_sk`, sum(`store_returns`.`sr_return_amt_inc_tax`) AS `ctr_total_return` FROM `store_returns` CROSS JOIN `date_dim` WHERE ((`store_returns`.`sr_returned_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 1999)) GROUP BY `store_returns`.`sr_customer_sk`, `store_returns`.`sr_store_sk`) AS `ctr2` WHERE (`ctr1`.`ctr_store_sk` = `ctr2`.`ctr_store_sk`))) ORDER BY `customer`.`c_customer_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q20_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q20_explain.snap new file mode 100644 index 0000000000..66c5525053 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q20_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q20" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST | +| | Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(catalog_sales.cs_ext_sales_price) AS itemrevenue, sum(catalog_sales.cs_ext_sales_price) * Int64(100) / sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS revenueratio | +| | WindowAggr: windowExpr=[[sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], full_filters=[item.i_category IN ([Utf8("Children"), Utf8("Sports"), Utf8("Music")])] | +| | Filter: date_dim.d_date BETWEEN CAST(Utf8("2002-04-01") AS Date32) AND CAST(Utf8("2002-04-01") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 30, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(catalog_sales.cs_ext_sales_price) AS itemrevenue, ((sum(catalog_sales.cs_ext_sales_price) * 100) / sum(sum(catalog_sales.cs_ext_sales_price)) OVER (PARTITION BY item.i_class ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS revenueratio FROM catalog_sales JOIN item ON ((catalog_sales.cs_item_sk = item.i_item_sk) AND item.i_category IN ('Children', 'Sports', 'Music')) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_date BETWEEN CAST('2002-04-01' AS DATE) AND (CAST('2002-04-01' AS DATE) + INTERVAL '30 DAYS'))) GROUP BY item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price ORDER BY item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_category`, `item`.`i_class`, `item`.`i_current_price`, sum(`catalog_sales`.`cs_ext_sales_price`) AS `itemrevenue`, ((sum(`catalog_sales`.`cs_ext_sales_price`) * 100) / sum(sum(`catalog_sales`.`cs_ext_sales_price`)) OVER (PARTITION BY `item`.`i_class` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS `revenueratio` FROM `catalog_sales` JOIN `item` ON ((`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) AND `item`.`i_category` IN ('Children', 'Sports', 'Music')) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_date` BETWEEN CAST('2002-04-01' AS TEXT) AND (CAST(date(CAST('2002-04-01' AS TEXT), '+30 days') AS TEXT)))) GROUP BY `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_category`, `item`.`i_class`, `item`.`i_current_price` ORDER BY `item`.`i_category` ASC NULLS LAST, `item`.`i_class` ASC NULLS LAST, `item`.`i_item_id` ASC NULLS LAST, `item`.`i_item_desc` ASC NULLS LAST, `revenueratio` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q21_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q21_explain.snap new file mode 100644 index 0000000000..a59e26769f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q21_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q21" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: x.w_warehouse_name ASC NULLS LAST, x.i_item_id ASC NULLS LAST | +| | Projection: x.w_warehouse_name, x.i_item_id, x.inv_before, x.inv_after | +| | Filter: CASE WHEN x.inv_before > Int64(0) THEN x.inv_after / x.inv_before ELSE NULL END BETWEEN Float64(2) / Float64(3) AND Float64(3) / Float64(2) | +| | SubqueryAlias: x | +| | Projection: warehouse.w_warehouse_name, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS inv_before, sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS inv_after | +| | Aggregate: groupBy=[[warehouse.w_warehouse_name, item.i_item_id]], aggr=[[sum(CASE WHEN CAST(date_dim.d_date AS Date32) < CAST(Utf8("2000-05-19") AS Date32) THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN CAST(date_dim.d_date AS Date32) >= CAST(Utf8("2000-05-19") AS Date32) THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)]] | +| | Inner Join: Filter: inventory.inv_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: item.i_item_sk = inventory.inv_item_sk | +| | Inner Join: Filter: inventory.inv_warehouse_sk = warehouse.w_warehouse_sk | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | Filter: item.i_current_price BETWEEN Float64(0.99) AND Float64(1.49) | +| | TableScan: item projection=[i_item_sk, i_item_id, i_current_price] | +| | Filter: date_dim.d_date BETWEEN CAST(Utf8("2000-05-19") AS Date32) - IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 30, nanoseconds: 0 }") AND CAST(Utf8("2000-05-19") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 30, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT x.w_warehouse_name, x.i_item_id, x.inv_before, x.inv_after FROM (SELECT "warehouse".w_warehouse_name, item.i_item_id, sum(CASE WHEN (CAST(date_dim.d_date AS DATE) < CAST('2000-05-19' AS DATE)) THEN inventory.inv_quantity_on_hand ELSE 0 END) AS inv_before, sum(CASE WHEN (CAST(date_dim.d_date AS DATE) >= CAST('2000-05-19' AS DATE)) THEN inventory.inv_quantity_on_hand ELSE 0 END) AS inv_after FROM inventory JOIN "warehouse" ON (inventory.inv_warehouse_sk = "warehouse".w_warehouse_sk) JOIN item ON ((item.i_item_sk = inventory.inv_item_sk) AND (item.i_current_price BETWEEN 0.99 AND 1.49)) JOIN date_dim ON ((inventory.inv_date_sk = date_dim.d_date_sk) AND (date_dim.d_date BETWEEN (CAST('2000-05-19' AS DATE) - INTERVAL '30 DAYS') AND (CAST('2000-05-19' AS DATE) + INTERVAL '30 DAYS'))) GROUP BY "warehouse".w_warehouse_name, item.i_item_id) AS x WHERE (CASE WHEN (x.inv_before > 0) THEN (x.inv_after / x.inv_before) ELSE NULL END BETWEEN (2.0 / 3.0) AND (3.0 / 2.0)) ORDER BY x.w_warehouse_name ASC NULLS LAST, x.i_item_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `x`.`w_warehouse_name`, `x`.`i_item_id`, `x`.`inv_before`, `x`.`inv_after` FROM (SELECT `warehouse`.`w_warehouse_name`, `item`.`i_item_id`, sum(CASE WHEN (CAST(`date_dim`.`d_date` AS TEXT) < CAST('2000-05-19' AS TEXT)) THEN `inventory`.`inv_quantity_on_hand` ELSE 0 END) AS `inv_before`, sum(CASE WHEN (CAST(`date_dim`.`d_date` AS TEXT) >= CAST('2000-05-19' AS TEXT)) THEN `inventory`.`inv_quantity_on_hand` ELSE 0 END) AS `inv_after` FROM `inventory` JOIN `warehouse` ON (`inventory`.`inv_warehouse_sk` = `warehouse`.`w_warehouse_sk`) JOIN `item` ON ((`item`.`i_item_sk` = `inventory`.`inv_item_sk`) AND (`item`.`i_current_price` BETWEEN 0.99 AND 1.49)) JOIN `date_dim` ON ((`inventory`.`inv_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_date` BETWEEN (CAST(date(CAST('2000-05-19' AS TEXT), '-30 days') AS TEXT)) AND (CAST(date(CAST('2000-05-19' AS TEXT), '+30 days') AS TEXT)))) GROUP BY `warehouse`.`w_warehouse_name`, `item`.`i_item_id`) AS `x` WHERE (CASE WHEN (`x`.`inv_before` > 0) THEN (`x`.`inv_after` / `x`.`inv_before`) ELSE NULL END BETWEEN (2.0 / 3.0) AND (3.0 / 2.0)) ORDER BY `x`.`w_warehouse_name` ASC NULLS LAST, `x`.`i_item_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q25_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q25_explain.snap new file mode 100644 index 0000000000..433d3d488e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q25_explain.snap @@ -0,0 +1,39 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q25" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, store.s_store_id ASC NULLS LAST, store.s_store_name ASC NULLS LAST | +| | Projection: item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name, min(store_sales.ss_net_profit) AS store_sales_profit, min(store_returns.sr_net_loss) AS store_returns_loss, min(catalog_sales.cs_net_profit) AS catalog_sales_profit | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name]], aggr=[[min(store_sales.ss_net_profit), min(store_returns.sr_net_loss), min(catalog_sales.cs_net_profit)]] | +| | Inner Join: Filter: item.i_item_sk = store_sales.ss_item_sk | +| | Inner Join: Filter: store.s_store_sk = store_sales.ss_store_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = d3.d_date_sk | +| | Inner Join: Filter: store_returns.sr_returned_date_sk = d2.d_date_sk | +| | Inner Join: Filter: d1.d_date_sk = store_sales.ss_sold_date_sk | +| | Inner Join: Filter: store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk AND store_returns.sr_item_sk = catalog_sales.cs_item_sk | +| | Inner Join: Filter: store_sales.ss_customer_sk = store_returns.sr_customer_sk AND store_sales.ss_item_sk = store_returns.sr_item_sk AND store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_profit] | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_net_loss] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_net_profit] | +| | Filter: d1.d_moy = Int64(4) AND d1.d_year = Int64(2002) | +| | SubqueryAlias: d1 | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy] | +| | Filter: d2.d_moy BETWEEN Int64(4) AND Int64(10) AND d2.d_year = Int64(2002) | +| | SubqueryAlias: d2 | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy] | +| | Filter: d3.d_moy BETWEEN Int64(4) AND Int64(10) AND d3.d_year = Int64(2002) | +| | SubqueryAlias: d3 | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy] | +| | TableScan: store projection=[s_store_sk, s_store_id, s_store_name] | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name, min(store_sales.ss_net_profit) AS store_sales_profit, min(store_returns.sr_net_loss) AS store_returns_loss, min(catalog_sales.cs_net_profit) AS catalog_sales_profit FROM store_sales JOIN store_returns ON (((store_sales.ss_customer_sk = store_returns.sr_customer_sk) AND (store_sales.ss_item_sk = store_returns.sr_item_sk)) AND (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) JOIN catalog_sales ON ((store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk) AND (store_returns.sr_item_sk = catalog_sales.cs_item_sk)) JOIN date_dim AS d1 ON ((d1.d_date_sk = store_sales.ss_sold_date_sk) AND ((d1.d_moy = 4) AND (d1.d_year = 2002))) JOIN date_dim AS d2 ON ((store_returns.sr_returned_date_sk = d2.d_date_sk) AND ((d2.d_moy BETWEEN 4 AND 10) AND (d2.d_year = 2002))) JOIN date_dim AS d3 ON ((catalog_sales.cs_sold_date_sk = d3.d_date_sk) AND ((d3.d_moy BETWEEN 4 AND 10) AND (d3.d_year = 2002))) JOIN store ON (store.s_store_sk = store_sales.ss_store_sk) JOIN item ON (item.i_item_sk = store_sales.ss_item_sk) GROUP BY item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name ORDER BY item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, store.s_store_id ASC NULLS LAST, store.s_store_name ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_id`, `item`.`i_item_desc`, `store`.`s_store_id`, `store`.`s_store_name`, min(`store_sales`.`ss_net_profit`) AS `store_sales_profit`, min(`store_returns`.`sr_net_loss`) AS `store_returns_loss`, min(`catalog_sales`.`cs_net_profit`) AS `catalog_sales_profit` FROM `store_sales` JOIN `store_returns` ON (((`store_sales`.`ss_customer_sk` = `store_returns`.`sr_customer_sk`) AND (`store_sales`.`ss_item_sk` = `store_returns`.`sr_item_sk`)) AND (`store_sales`.`ss_ticket_number` = `store_returns`.`sr_ticket_number`)) JOIN `catalog_sales` ON ((`store_returns`.`sr_customer_sk` = `catalog_sales`.`cs_bill_customer_sk`) AND (`store_returns`.`sr_item_sk` = `catalog_sales`.`cs_item_sk`)) JOIN `date_dim` AS `d1` ON ((`d1`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND ((`d1`.`d_moy` = 4) AND (`d1`.`d_year` = 2002))) JOIN `date_dim` AS `d2` ON ((`store_returns`.`sr_returned_date_sk` = `d2`.`d_date_sk`) AND ((`d2`.`d_moy` BETWEEN 4 AND 10) AND (`d2`.`d_year` = 2002))) JOIN `date_dim` AS `d3` ON ((`catalog_sales`.`cs_sold_date_sk` = `d3`.`d_date_sk`) AND ((`d3`.`d_moy` BETWEEN 4 AND 10) AND (`d3`.`d_year` = 2002))) JOIN `store` ON (`store`.`s_store_sk` = `store_sales`.`ss_store_sk`) JOIN `item` ON (`item`.`i_item_sk` = `store_sales`.`ss_item_sk`) GROUP BY `item`.`i_item_id`, `item`.`i_item_desc`, `store`.`s_store_id`, `store`.`s_store_name` ORDER BY `item`.`i_item_id` ASC NULLS LAST, `item`.`i_item_desc` ASC NULLS LAST, `store`.`s_store_id` ASC NULLS LAST, `store`.`s_store_name` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q26_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q26_explain.snap new file mode 100644 index 0000000000..36e2cb38f7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q26_explain.snap @@ -0,0 +1,27 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q26" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: item.i_item_id ASC NULLS LAST | +| | Projection: item.i_item_id, avg(catalog_sales.cs_quantity) AS agg1, avg(catalog_sales.cs_list_price) AS agg2, avg(catalog_sales.cs_coupon_amt) AS agg3, avg(catalog_sales.cs_sales_price) AS agg4 | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_promo_sk = promotion.p_promo_sk | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_cdemo_sk, cs_item_sk, cs_promo_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt] | +| | TableScan: customer_demographics projection=[cd_demo_sk], full_filters=[customer_demographics.cd_gender = Utf8("F"), customer_demographics.cd_marital_status = Utf8("M"), customer_demographics.cd_education_status = Utf8("4 yr Degree")] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2000)] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_email = Utf8("N") OR promotion.p_channel_event = Utf8("N")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, avg(catalog_sales.cs_quantity) AS agg1, avg(catalog_sales.cs_list_price) AS agg2, avg(catalog_sales.cs_coupon_amt) AS agg3, avg(catalog_sales.cs_sales_price) AS agg4 FROM catalog_sales JOIN customer_demographics ON ((catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk) AND (((customer_demographics.cd_gender = 'F') AND (customer_demographics.cd_marital_status = 'M')) AND (customer_demographics.cd_education_status = '4 yr Degree'))) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2000)) JOIN item ON (catalog_sales.cs_item_sk = item.i_item_sk) JOIN promotion ON ((catalog_sales.cs_promo_sk = promotion.p_promo_sk) AND ((promotion.p_channel_email = 'N') OR (promotion.p_channel_event = 'N'))) GROUP BY item.i_item_id ORDER BY item.i_item_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_id`, avg(`catalog_sales`.`cs_quantity`) AS `agg1`, avg(`catalog_sales`.`cs_list_price`) AS `agg2`, avg(`catalog_sales`.`cs_coupon_amt`) AS `agg3`, avg(`catalog_sales`.`cs_sales_price`) AS `agg4` FROM `catalog_sales` JOIN `customer_demographics` ON ((`catalog_sales`.`cs_bill_cdemo_sk` = `customer_demographics`.`cd_demo_sk`) AND (((`customer_demographics`.`cd_gender` = 'F') AND (`customer_demographics`.`cd_marital_status` = 'M')) AND (`customer_demographics`.`cd_education_status` = '4 yr Degree'))) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2000)) JOIN `item` ON (`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) JOIN `promotion` ON ((`catalog_sales`.`cs_promo_sk` = `promotion`.`p_promo_sk`) AND ((`promotion`.`p_channel_email` = 'N') OR (`promotion`.`p_channel_event` = 'N'))) GROUP BY `item`.`i_item_id` ORDER BY `item`.`i_item_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q28_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q28_explain.snap new file mode 100644 index 0000000000..0c9be9167a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q28_explain.snap @@ -0,0 +1,51 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q28" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: B1.B1_LP, B1.B1_CNT, B1.B1_CNTD, B2.B2_LP, B2.B2_CNT, B2.B2_CNTD, B3.B3_LP, B3.B3_CNT, B3.B3_CNTD, B4.B4_LP, B4.B4_CNT, B4.B4_CNTD, B5.B5_LP, B5.B5_CNT, B5.B5_CNTD, B6.B6_LP, B6.B6_CNT, B6.B6_CNTD | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | SubqueryAlias: B1 | +| | Projection: avg(store_sales.ss_list_price) AS B1_LP, count(store_sales.ss_list_price) AS B1_CNT, count(DISTINCT store_sales.ss_list_price) AS B1_CNTD | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(0) AND Int64(5) AND (store_sales.ss_list_price BETWEEN Int64(28) AND Int64(28) + Int64(10) OR store_sales.ss_coupon_amt BETWEEN Int64(12573) AND Int64(12573) + Int64(1000) OR store_sales.ss_wholesale_cost BETWEEN Int64(33) AND Int64(33) + Int64(20)) | +| | TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | SubqueryAlias: B2 | +| | Projection: avg(store_sales.ss_list_price) AS B2_LP, count(store_sales.ss_list_price) AS B2_CNT, count(DISTINCT store_sales.ss_list_price) AS B2_CNTD | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(6) AND Int64(10) AND (store_sales.ss_list_price BETWEEN Int64(143) AND Int64(143) + Int64(10) OR store_sales.ss_coupon_amt BETWEEN Int64(5562) AND Int64(5562) + Int64(1000) OR store_sales.ss_wholesale_cost BETWEEN Int64(45) AND Int64(45) + Int64(20)) | +| | TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | SubqueryAlias: B3 | +| | Projection: avg(store_sales.ss_list_price) AS B3_LP, count(store_sales.ss_list_price) AS B3_CNT, count(DISTINCT store_sales.ss_list_price) AS B3_CNTD | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(11) AND Int64(15) AND (store_sales.ss_list_price BETWEEN Int64(159) AND Int64(159) + Int64(10) OR store_sales.ss_coupon_amt BETWEEN Int64(2807) AND Int64(2807) + Int64(1000) OR store_sales.ss_wholesale_cost BETWEEN Int64(24) AND Int64(24) + Int64(20)) | +| | TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | SubqueryAlias: B4 | +| | Projection: avg(store_sales.ss_list_price) AS B4_LP, count(store_sales.ss_list_price) AS B4_CNT, count(DISTINCT store_sales.ss_list_price) AS B4_CNTD | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(16) AND Int64(20) AND (store_sales.ss_list_price BETWEEN Int64(24) AND Int64(24) + Int64(10) OR store_sales.ss_coupon_amt BETWEEN Int64(3706) AND Int64(3706) + Int64(1000) OR store_sales.ss_wholesale_cost BETWEEN Int64(46) AND Int64(46) + Int64(20)) | +| | TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | SubqueryAlias: B5 | +| | Projection: avg(store_sales.ss_list_price) AS B5_LP, count(store_sales.ss_list_price) AS B5_CNT, count(DISTINCT store_sales.ss_list_price) AS B5_CNTD | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(21) AND Int64(25) AND (store_sales.ss_list_price BETWEEN Int64(76) AND Int64(76) + Int64(10) OR store_sales.ss_coupon_amt BETWEEN Int64(2096) AND Int64(2096) + Int64(1000) OR store_sales.ss_wholesale_cost BETWEEN Int64(50) AND Int64(50) + Int64(20)) | +| | TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | SubqueryAlias: B6 | +| | Projection: avg(store_sales.ss_list_price) AS B6_LP, count(store_sales.ss_list_price) AS B6_CNT, count(DISTINCT store_sales.ss_list_price) AS B6_CNTD | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(26) AND Int64(30) AND (store_sales.ss_list_price BETWEEN Int64(169) AND Int64(169) + Int64(10) OR store_sales.ss_coupon_amt BETWEEN Int64(10672) AND Int64(10672) + Int64(1000) OR store_sales.ss_wholesale_cost BETWEEN Int64(58) AND Int64(58) + Int64(20)) | +| | TableScan: store_sales projection=[ss_quantity, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT B1.B1_LP, B1.B1_CNT, B1.B1_CNTD, B2.B2_LP, B2.B2_CNT, B2.B2_CNTD, B3.B3_LP, B3.B3_CNT, B3.B3_CNTD, B4.B4_LP, B4.B4_CNT, B4.B4_CNTD, B5.B5_LP, B5.B5_CNT, B5.B5_CNTD, B6.B6_LP, B6.B6_CNT, B6.B6_CNTD FROM (SELECT avg(store_sales.ss_list_price) AS B1_LP, count(store_sales.ss_list_price) AS B1_CNT, count(DISTINCT store_sales.ss_list_price) AS B1_CNTD FROM store_sales WHERE ((store_sales.ss_quantity BETWEEN 0 AND 5) AND (((store_sales.ss_list_price BETWEEN 28 AND (28 + 10)) OR (store_sales.ss_coupon_amt BETWEEN 12573 AND (12573 + 1000))) OR (store_sales.ss_wholesale_cost BETWEEN 33 AND (33 + 20))))) AS B1 CROSS JOIN (SELECT avg(store_sales.ss_list_price) AS B2_LP, count(store_sales.ss_list_price) AS B2_CNT, count(DISTINCT store_sales.ss_list_price) AS B2_CNTD FROM store_sales WHERE ((store_sales.ss_quantity BETWEEN 6 AND 10) AND (((store_sales.ss_list_price BETWEEN 143 AND (143 + 10)) OR (store_sales.ss_coupon_amt BETWEEN 5562 AND (5562 + 1000))) OR (store_sales.ss_wholesale_cost BETWEEN 45 AND (45 + 20))))) AS B2 CROSS JOIN (SELECT avg(store_sales.ss_list_price) AS B3_LP, count(store_sales.ss_list_price) AS B3_CNT, count(DISTINCT store_sales.ss_list_price) AS B3_CNTD FROM store_sales WHERE ((store_sales.ss_quantity BETWEEN 11 AND 15) AND (((store_sales.ss_list_price BETWEEN 159 AND (159 + 10)) OR (store_sales.ss_coupon_amt BETWEEN 2807 AND (2807 + 1000))) OR (store_sales.ss_wholesale_cost BETWEEN 24 AND (24 + 20))))) AS B3 CROSS JOIN (SELECT avg(store_sales.ss_list_price) AS B4_LP, count(store_sales.ss_list_price) AS B4_CNT, count(DISTINCT store_sales.ss_list_price) AS B4_CNTD FROM store_sales WHERE ((store_sales.ss_quantity BETWEEN 16 AND 20) AND (((store_sales.ss_list_price BETWEEN 24 AND (24 + 10)) OR (store_sales.ss_coupon_amt BETWEEN 3706 AND (3706 + 1000))) OR (store_sales.ss_wholesale_cost BETWEEN 46 AND (46 + 20))))) AS B4 CROSS JOIN (SELECT avg(store_sales.ss_list_price) AS B5_LP, count(store_sales.ss_list_price) AS B5_CNT, count(DISTINCT store_sales.ss_list_price) AS B5_CNTD FROM store_sales WHERE ((store_sales.ss_quantity BETWEEN 21 AND 25) AND (((store_sales.ss_list_price BETWEEN 76 AND (76 + 10)) OR (store_sales.ss_coupon_amt BETWEEN 2096 AND (2096 + 1000))) OR (store_sales.ss_wholesale_cost BETWEEN 50 AND (50 + 20))))) AS B5 CROSS JOIN (SELECT avg(store_sales.ss_list_price) AS B6_LP, count(store_sales.ss_list_price) AS B6_CNT, count(DISTINCT store_sales.ss_list_price) AS B6_CNTD FROM store_sales WHERE ((store_sales.ss_quantity BETWEEN 26 AND 30) AND (((store_sales.ss_list_price BETWEEN 169 AND (169 + 10)) OR (store_sales.ss_coupon_amt BETWEEN 10672 AND (10672 + 1000))) OR (store_sales.ss_wholesale_cost BETWEEN 58 AND (58 + 20))))) AS B6 LIMIT 100 rewritten_sql=SELECT `B1`.`B1_LP`, `B1`.`B1_CNT`, `B1`.`B1_CNTD`, `B2`.`B2_LP`, `B2`.`B2_CNT`, `B2`.`B2_CNTD`, `B3`.`B3_LP`, `B3`.`B3_CNT`, `B3`.`B3_CNTD`, `B4`.`B4_LP`, `B4`.`B4_CNT`, `B4`.`B4_CNTD`, `B5`.`B5_LP`, `B5`.`B5_CNT`, `B5`.`B5_CNTD`, `B6`.`B6_LP`, `B6`.`B6_CNT`, `B6`.`B6_CNTD` FROM (SELECT avg(`store_sales`.`ss_list_price`) AS `B1_LP`, count(`store_sales`.`ss_list_price`) AS `B1_CNT`, count(DISTINCT `store_sales`.`ss_list_price`) AS `B1_CNTD` FROM `store_sales` WHERE ((`store_sales`.`ss_quantity` BETWEEN 0 AND 5) AND (((`store_sales`.`ss_list_price` BETWEEN 28 AND (28 + 10)) OR (`store_sales`.`ss_coupon_amt` BETWEEN 12573 AND (12573 + 1000))) OR (`store_sales`.`ss_wholesale_cost` BETWEEN 33 AND (33 + 20))))) AS `B1` CROSS JOIN (SELECT avg(`store_sales`.`ss_list_price`) AS `B2_LP`, count(`store_sales`.`ss_list_price`) AS `B2_CNT`, count(DISTINCT `store_sales`.`ss_list_price`) AS `B2_CNTD` FROM `store_sales` WHERE ((`store_sales`.`ss_quantity` BETWEEN 6 AND 10) AND (((`store_sales`.`ss_list_price` BETWEEN 143 AND (143 + 10)) OR (`store_sales`.`ss_coupon_amt` BETWEEN 5562 AND (5562 + 1000))) OR (`store_sales`.`ss_wholesale_cost` BETWEEN 45 AND (45 + 20))))) AS `B2` CROSS JOIN (SELECT avg(`store_sales`.`ss_list_price`) AS `B3_LP`, count(`store_sales`.`ss_list_price`) AS `B3_CNT`, count(DISTINCT `store_sales`.`ss_list_price`) AS `B3_CNTD` FROM `store_sales` WHERE ((`store_sales`.`ss_quantity` BETWEEN 11 AND 15) AND (((`store_sales`.`ss_list_price` BETWEEN 159 AND (159 + 10)) OR (`store_sales`.`ss_coupon_amt` BETWEEN 2807 AND (2807 + 1000))) OR (`store_sales`.`ss_wholesale_cost` BETWEEN 24 AND (24 + 20))))) AS `B3` CROSS JOIN (SELECT avg(`store_sales`.`ss_list_price`) AS `B4_LP`, count(`store_sales`.`ss_list_price`) AS `B4_CNT`, count(DISTINCT `store_sales`.`ss_list_price`) AS `B4_CNTD` FROM `store_sales` WHERE ((`store_sales`.`ss_quantity` BETWEEN 16 AND 20) AND (((`store_sales`.`ss_list_price` BETWEEN 24 AND (24 + 10)) OR (`store_sales`.`ss_coupon_amt` BETWEEN 3706 AND (3706 + 1000))) OR (`store_sales`.`ss_wholesale_cost` BETWEEN 46 AND (46 + 20))))) AS `B4` CROSS JOIN (SELECT avg(`store_sales`.`ss_list_price`) AS `B5_LP`, count(`store_sales`.`ss_list_price`) AS `B5_CNT`, count(DISTINCT `store_sales`.`ss_list_price`) AS `B5_CNTD` FROM `store_sales` WHERE ((`store_sales`.`ss_quantity` BETWEEN 21 AND 25) AND (((`store_sales`.`ss_list_price` BETWEEN 76 AND (76 + 10)) OR (`store_sales`.`ss_coupon_amt` BETWEEN 2096 AND (2096 + 1000))) OR (`store_sales`.`ss_wholesale_cost` BETWEEN 50 AND (50 + 20))))) AS `B5` CROSS JOIN (SELECT avg(`store_sales`.`ss_list_price`) AS `B6_LP`, count(`store_sales`.`ss_list_price`) AS `B6_CNT`, count(DISTINCT `store_sales`.`ss_list_price`) AS `B6_CNTD` FROM `store_sales` WHERE ((`store_sales`.`ss_quantity` BETWEEN 26 AND 30) AND (((`store_sales`.`ss_list_price` BETWEEN 169 AND (169 + 10)) OR (`store_sales`.`ss_coupon_amt` BETWEEN 10672 AND (10672 + 1000))) OR (`store_sales`.`ss_wholesale_cost` BETWEEN 58 AND (58 + 20))))) AS `B6` LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q2_explain.snap new file mode 100644 index 0000000000..d0fe07030f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q2_explain.snap @@ -0,0 +1,49 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q2" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: y.d_week_seq1 ASC NULLS LAST | +| | Projection: y.d_week_seq1, round(y.sun_sales1 / z.sun_sales2, Int64(2)), round(y.mon_sales1 / z.mon_sales2, Int64(2)), round(y.tue_sales1 / z.tue_sales2, Int64(2)), round(y.wed_sales1 / z.wed_sales2, Int64(2)), round(y.thu_sales1 / z.thu_sales2, Int64(2)), round(y.fri_sales1 / z.fri_sales2, Int64(2)), round(y.sat_sales1 / z.sat_sales2, Int64(2)) | +| | Inner Join: Filter: y.d_week_seq1 = z.d_week_seq2 - Int64(53) | +| | SubqueryAlias: y | +| | Projection: wswscs.d_week_seq AS d_week_seq1, wswscs.sun_sales AS sun_sales1, wswscs.mon_sales AS mon_sales1, wswscs.tue_sales AS tue_sales1, wswscs.wed_sales AS wed_sales1, wswscs.thu_sales AS thu_sales1, wswscs.fri_sales AS fri_sales1, wswscs.sat_sales AS sat_sales1 | +| | Inner Join: Filter: date_dim.d_week_seq = wswscs.d_week_seq | +| | SubqueryAlias: wswscs | +| | Projection: date_dim.d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)]] | +| | Inner Join: Filter: date_dim.d_date_sk = wscs.sold_date_sk | +| | SubqueryAlias: wscs | +| | Projection: sold_date_sk, sales_price | +| | Union | +| | Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_ext_sales_price] | +| | Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_year = Int64(2000)] | +| | SubqueryAlias: z | +| | Projection: wswscs.d_week_seq AS d_week_seq2, wswscs.sun_sales AS sun_sales2, wswscs.mon_sales AS mon_sales2, wswscs.tue_sales AS tue_sales2, wswscs.wed_sales AS wed_sales2, wswscs.thu_sales AS thu_sales2, wswscs.fri_sales AS fri_sales2, wswscs.sat_sales AS sat_sales2 | +| | Inner Join: Filter: date_dim.d_week_seq = wswscs.d_week_seq | +| | SubqueryAlias: wswscs | +| | Projection: date_dim.d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)]] | +| | Inner Join: Filter: date_dim.d_date_sk = wscs.sold_date_sk | +| | SubqueryAlias: wscs | +| | Projection: sold_date_sk, sales_price | +| | Union | +| | Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_ext_sales_price] | +| | Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_year = Int64(2000) + Int64(1)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT y.d_week_seq1, round((y.sun_sales1 / z.sun_sales2), 2), round((y.mon_sales1 / z.mon_sales2), 2), round((y.tue_sales1 / z.tue_sales2), 2), round((y.wed_sales1 / z.wed_sales2), 2), round((y.thu_sales1 / z.thu_sales2), 2), round((y.fri_sales1 / z.fri_sales2), 2), round((y.sat_sales1 / z.sat_sales2), 2) FROM (SELECT wswscs.d_week_seq AS d_week_seq1, wswscs.sun_sales AS sun_sales1, wswscs.mon_sales AS mon_sales1, wswscs.tue_sales AS tue_sales1, wswscs.wed_sales AS wed_sales1, wswscs.thu_sales AS thu_sales1, wswscs.fri_sales AS fri_sales1, wswscs.sat_sales AS sat_sales1 FROM (SELECT date_dim.d_week_seq, sum(CASE WHEN (date_dim.d_day_name = 'Sunday') THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN (date_dim.d_day_name = 'Monday') THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN (date_dim.d_day_name = 'Tuesday') THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN (date_dim.d_day_name = 'Wednesday') THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN (date_dim.d_day_name = 'Thursday') THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN (date_dim.d_day_name = 'Friday') THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN (date_dim.d_day_name = 'Saturday') THEN wscs.sales_price ELSE NULL END) AS sat_sales FROM (SELECT sold_date_sk, sales_price FROM (SELECT web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price FROM web_sales UNION ALL SELECT catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price FROM catalog_sales)) AS wscs JOIN date_dim ON (date_dim.d_date_sk = wscs.sold_date_sk) GROUP BY date_dim.d_week_seq) AS wswscs JOIN date_dim ON ((date_dim.d_week_seq = wswscs.d_week_seq) AND (date_dim.d_year = 2000))) AS y JOIN (SELECT wswscs.d_week_seq AS d_week_seq2, wswscs.sun_sales AS sun_sales2, wswscs.mon_sales AS mon_sales2, wswscs.tue_sales AS tue_sales2, wswscs.wed_sales AS wed_sales2, wswscs.thu_sales AS thu_sales2, wswscs.fri_sales AS fri_sales2, wswscs.sat_sales AS sat_sales2 FROM (SELECT date_dim.d_week_seq, sum(CASE WHEN (date_dim.d_day_name = 'Sunday') THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN (date_dim.d_day_name = 'Monday') THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN (date_dim.d_day_name = 'Tuesday') THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN (date_dim.d_day_name = 'Wednesday') THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN (date_dim.d_day_name = 'Thursday') THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN (date_dim.d_day_name = 'Friday') THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN (date_dim.d_day_name = 'Saturday') THEN wscs.sales_price ELSE NULL END) AS sat_sales FROM (SELECT sold_date_sk, sales_price FROM (SELECT web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price FROM web_sales UNION ALL SELECT catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price FROM catalog_sales)) AS wscs JOIN date_dim ON (date_dim.d_date_sk = wscs.sold_date_sk) GROUP BY date_dim.d_week_seq) AS wswscs JOIN date_dim ON ((date_dim.d_week_seq = wswscs.d_week_seq) AND (date_dim.d_year = (2000 + 1)))) AS z ON (y.d_week_seq1 = (z.d_week_seq2 - 53)) ORDER BY y.d_week_seq1 ASC NULLS LAST rewritten_sql=SELECT `y`.`d_week_seq1`, round((`y`.`sun_sales1` / `z`.`sun_sales2`), 2), round((`y`.`mon_sales1` / `z`.`mon_sales2`), 2), round((`y`.`tue_sales1` / `z`.`tue_sales2`), 2), round((`y`.`wed_sales1` / `z`.`wed_sales2`), 2), round((`y`.`thu_sales1` / `z`.`thu_sales2`), 2), round((`y`.`fri_sales1` / `z`.`fri_sales2`), 2), round((`y`.`sat_sales1` / `z`.`sat_sales2`), 2) FROM (SELECT `wswscs`.`d_week_seq` AS `d_week_seq1`, `wswscs`.`sun_sales` AS `sun_sales1`, `wswscs`.`mon_sales` AS `mon_sales1`, `wswscs`.`tue_sales` AS `tue_sales1`, `wswscs`.`wed_sales` AS `wed_sales1`, `wswscs`.`thu_sales` AS `thu_sales1`, `wswscs`.`fri_sales` AS `fri_sales1`, `wswscs`.`sat_sales` AS `sat_sales1` FROM (SELECT `date_dim`.`d_week_seq`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Sunday') THEN `wscs`.`sales_price` ELSE NULL END) AS `sun_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Monday') THEN `wscs`.`sales_price` ELSE NULL END) AS `mon_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Tuesday') THEN `wscs`.`sales_price` ELSE NULL END) AS `tue_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Wednesday') THEN `wscs`.`sales_price` ELSE NULL END) AS `wed_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Thursday') THEN `wscs`.`sales_price` ELSE NULL END) AS `thu_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Friday') THEN `wscs`.`sales_price` ELSE NULL END) AS `fri_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Saturday') THEN `wscs`.`sales_price` ELSE NULL END) AS `sat_sales` FROM (SELECT `sold_date_sk`, `sales_price` FROM (SELECT `web_sales`.`ws_sold_date_sk` AS `sold_date_sk`, `web_sales`.`ws_ext_sales_price` AS `sales_price` FROM `web_sales` UNION ALL SELECT `catalog_sales`.`cs_sold_date_sk` AS `sold_date_sk`, `catalog_sales`.`cs_ext_sales_price` AS `sales_price` FROM `catalog_sales`)) AS `wscs` JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `wscs`.`sold_date_sk`) GROUP BY `date_dim`.`d_week_seq`) AS `wswscs` JOIN `date_dim` ON ((`date_dim`.`d_week_seq` = `wswscs`.`d_week_seq`) AND (`date_dim`.`d_year` = 2000))) AS `y` JOIN (SELECT `wswscs`.`d_week_seq` AS `d_week_seq2`, `wswscs`.`sun_sales` AS `sun_sales2`, `wswscs`.`mon_sales` AS `mon_sales2`, `wswscs`.`tue_sales` AS `tue_sales2`, `wswscs`.`wed_sales` AS `wed_sales2`, `wswscs`.`thu_sales` AS `thu_sales2`, `wswscs`.`fri_sales` AS `fri_sales2`, `wswscs`.`sat_sales` AS `sat_sales2` FROM (SELECT `date_dim`.`d_week_seq`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Sunday') THEN `wscs`.`sales_price` ELSE NULL END) AS `sun_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Monday') THEN `wscs`.`sales_price` ELSE NULL END) AS `mon_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Tuesday') THEN `wscs`.`sales_price` ELSE NULL END) AS `tue_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Wednesday') THEN `wscs`.`sales_price` ELSE NULL END) AS `wed_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Thursday') THEN `wscs`.`sales_price` ELSE NULL END) AS `thu_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Friday') THEN `wscs`.`sales_price` ELSE NULL END) AS `fri_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Saturday') THEN `wscs`.`sales_price` ELSE NULL END) AS `sat_sales` FROM (SELECT `sold_date_sk`, `sales_price` FROM (SELECT `web_sales`.`ws_sold_date_sk` AS `sold_date_sk`, `web_sales`.`ws_ext_sales_price` AS `sales_price` FROM `web_sales` UNION ALL SELECT `catalog_sales`.`cs_sold_date_sk` AS `sold_date_sk`, `catalog_sales`.`cs_ext_sales_price` AS `sales_price` FROM `catalog_sales`)) AS `wscs` JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `wscs`.`sold_date_sk`) GROUP BY `date_dim`.`d_week_seq`) AS `wswscs` JOIN `date_dim` ON ((`date_dim`.`d_week_seq` = `wswscs`.`d_week_seq`) AND (`date_dim`.`d_year` = (2000 + 1)))) AS `z` ON (`y`.`d_week_seq1` = (`z`.`d_week_seq2` - 53)) ORDER BY `y`.`d_week_seq1` ASC NULLS LAST | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q30_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q30_explain.snap new file mode 100644 index 0000000000..202c7862fd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q30_explain.snap @@ -0,0 +1,45 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q30" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer.c_customer_id ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_last_name ASC NULLS LAST, customer.c_preferred_cust_flag ASC NULLS LAST, customer.c_birth_day ASC NULLS LAST, customer.c_birth_month ASC NULLS LAST, customer.c_birth_year ASC NULLS LAST, customer.c_birth_country ASC NULLS LAST, customer.c_login ASC NULLS LAST, customer.c_email_address ASC NULLS LAST, customer.c_last_review_date_sk ASC NULLS LAST, ctr1.ctr_total_return ASC NULLS LAST | +| | Projection: customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk, ctr1.ctr_total_return | +| | Inner Join: Filter: customer_address.ca_address_sk = customer.c_current_addr_sk AND ctr1.ctr_customer_sk = customer.c_customer_sk | +| | Cross Join: | +| | Filter: ctr1.ctr_total_return > () | +| | Subquery: | +| | Projection: avg(ctr2.ctr_total_return) * Float64(1.2) | +| | Aggregate: groupBy=[[]], aggr=[[avg(ctr2.ctr_total_return)]] | +| | Filter: outer_ref(ctr1.ctr_state) = ctr2.ctr_state | +| | SubqueryAlias: ctr2 | +| | SubqueryAlias: customer_total_return | +| | Projection: web_returns.wr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return | +| | Aggregate: groupBy=[[web_returns.wr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(web_returns.wr_return_amt)]] | +| | Filter: web_returns.wr_returned_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(2000) AND web_returns.wr_returning_addr_sk = customer_address.ca_address_sk | +| | Cross Join: | +| | Cross Join: | +| | TableScan: web_returns | +| | TableScan: date_dim | +| | TableScan: customer_address | +| | SubqueryAlias: ctr1 | +| | SubqueryAlias: customer_total_return | +| | Projection: web_returns.wr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return | +| | Aggregate: groupBy=[[web_returns.wr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(web_returns.wr_return_amt)]] | +| | Inner Join: Filter: web_returns.wr_returning_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_returns.wr_returned_date_sk = date_dim.d_date_sk | +| | TableScan: web_returns projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2000)] | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = Utf8("KS")] | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_day, c_birth_month, c_birth_year, c_birth_country, c_login, c_email_address, c_last_review_date_sk] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk, ctr1.ctr_total_return FROM (SELECT web_returns.wr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return FROM web_returns JOIN date_dim ON ((web_returns.wr_returned_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2000)) JOIN customer_address ON (web_returns.wr_returning_addr_sk = customer_address.ca_address_sk) GROUP BY web_returns.wr_returning_customer_sk, customer_address.ca_state) AS ctr1 JOIN customer_address ON (customer_address.ca_state = 'KS') JOIN customer ON ((customer_address.ca_address_sk = customer.c_current_addr_sk) AND (ctr1.ctr_customer_sk = customer.c_customer_sk)) WHERE (ctr1.ctr_total_return > (SELECT (avg(ctr2.ctr_total_return) * 1.2) FROM (SELECT web_returns.wr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return FROM web_returns CROSS JOIN date_dim CROSS JOIN customer_address WHERE (((web_returns.wr_returned_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2000)) AND (web_returns.wr_returning_addr_sk = customer_address.ca_address_sk)) GROUP BY web_returns.wr_returning_customer_sk, customer_address.ca_state) AS ctr2 WHERE (ctr1.ctr_state = ctr2.ctr_state))) ORDER BY customer.c_customer_id ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_last_name ASC NULLS LAST, customer.c_preferred_cust_flag ASC NULLS LAST, customer.c_birth_day ASC NULLS LAST, customer.c_birth_month ASC NULLS LAST, customer.c_birth_year ASC NULLS LAST, customer.c_birth_country ASC NULLS LAST, customer.c_login ASC NULLS LAST, customer.c_email_address ASC NULLS LAST, customer.c_last_review_date_sk ASC NULLS LAST, ctr1.ctr_total_return ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer`.`c_customer_id`, `customer`.`c_salutation`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_day`, `customer`.`c_birth_month`, `customer`.`c_birth_year`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `customer`.`c_last_review_date_sk`, `ctr1`.`ctr_total_return` FROM (SELECT `web_returns`.`wr_returning_customer_sk` AS `ctr_customer_sk`, `customer_address`.`ca_state` AS `ctr_state`, sum(`web_returns`.`wr_return_amt`) AS `ctr_total_return` FROM `web_returns` JOIN `date_dim` ON ((`web_returns`.`wr_returned_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2000)) JOIN `customer_address` ON (`web_returns`.`wr_returning_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `web_returns`.`wr_returning_customer_sk`, `customer_address`.`ca_state`) AS `ctr1` JOIN `customer_address` ON (`customer_address`.`ca_state` = 'KS') JOIN `customer` ON ((`customer_address`.`ca_address_sk` = `customer`.`c_current_addr_sk`) AND (`ctr1`.`ctr_customer_sk` = `customer`.`c_customer_sk`)) WHERE (`ctr1`.`ctr_total_return` > (SELECT (avg(`ctr2`.`ctr_total_return`) * 1.2) FROM (SELECT `web_returns`.`wr_returning_customer_sk` AS `ctr_customer_sk`, `customer_address`.`ca_state` AS `ctr_state`, sum(`web_returns`.`wr_return_amt`) AS `ctr_total_return` FROM `web_returns` CROSS JOIN `date_dim` CROSS JOIN `customer_address` WHERE (((`web_returns`.`wr_returned_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2000)) AND (`web_returns`.`wr_returning_addr_sk` = `customer_address`.`ca_address_sk`)) GROUP BY `web_returns`.`wr_returning_customer_sk`, `customer_address`.`ca_state`) AS `ctr2` WHERE (`ctr1`.`ctr_state` = `ctr2`.`ctr_state`))) ORDER BY `customer`.`c_customer_id` ASC NULLS LAST, `customer`.`c_salutation` ASC NULLS LAST, `customer`.`c_first_name` ASC NULLS LAST, `customer`.`c_last_name` ASC NULLS LAST, `customer`.`c_preferred_cust_flag` ASC NULLS LAST, `customer`.`c_birth_day` ASC NULLS LAST, `customer`.`c_birth_month` ASC NULLS LAST, `customer`.`c_birth_year` ASC NULLS LAST, `customer`.`c_birth_country` ASC NULLS LAST, `customer`.`c_login` ASC NULLS LAST, `customer`.`c_email_address` ASC NULLS LAST, `customer`.`c_last_review_date_sk` ASC NULLS LAST, `ctr1`.`ctr_total_return` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q31_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q31_explain.snap new file mode 100644 index 0000000000..7daa03909f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q31_explain.snap @@ -0,0 +1,81 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q31" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: ss1.ca_county ASC NULLS LAST | +| | Projection: ss1.ca_county, ss1.d_year, ws2.web_sales / ws1.web_sales AS web_q1_q2_increase, ss2.store_sales / ss1.store_sales AS store_q1_q2_increase, ws3.web_sales / ws2.web_sales AS web_q2_q3_increase, ss3.store_sales / ss2.store_sales AS store_q2_q3_increase | +| | Inner Join: Filter: ws1.ca_county = ws3.ca_county AND CASE WHEN ws2.web_sales > Int64(0) THEN ws3.web_sales / ws2.web_sales ELSE NULL END > CASE WHEN ss2.store_sales > Int64(0) THEN ss3.store_sales / ss2.store_sales ELSE NULL END | +| | Inner Join: Filter: ws1.ca_county = ws2.ca_county AND CASE WHEN ws1.web_sales > Int64(0) THEN ws2.web_sales / ws1.web_sales ELSE NULL END > CASE WHEN ss1.store_sales > Int64(0) THEN ss2.store_sales / ss1.store_sales ELSE NULL END | +| | Inner Join: Filter: ss1.ca_county = ws1.ca_county | +| | Inner Join: Filter: ss2.ca_county = ss3.ca_county | +| | Inner Join: Filter: ss1.ca_county = ss2.ca_county | +| | Filter: ss1.d_qoy = Int64(1) AND ss1.d_year = Int64(1999) | +| | SubqueryAlias: ss1 | +| | SubqueryAlias: ss | +| | Projection: customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | Filter: ss2.d_qoy = Int64(2) AND ss2.d_year = Int64(1999) | +| | SubqueryAlias: ss2 | +| | SubqueryAlias: ss | +| | Projection: customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | Filter: ss3.d_qoy = Int64(3) AND ss3.d_year = Int64(1999) | +| | SubqueryAlias: ss3 | +| | SubqueryAlias: ss | +| | Projection: customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | Filter: ws1.d_qoy = Int64(1) AND ws1.d_year = Int64(1999) | +| | SubqueryAlias: ws1 | +| | SubqueryAlias: ws | +| | Projection: customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(web_sales.ws_ext_sales_price) AS web_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | Filter: ws2.d_qoy = Int64(2) AND ws2.d_year = Int64(1999) | +| | SubqueryAlias: ws2 | +| | SubqueryAlias: ws | +| | Projection: customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(web_sales.ws_ext_sales_price) AS web_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | Filter: ws3.d_qoy = Int64(3) AND ws3.d_year = Int64(1999) | +| | SubqueryAlias: ws3 | +| | SubqueryAlias: ws | +| | Projection: customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(web_sales.ws_ext_sales_price) AS web_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT ss1.ca_county, ss1.d_year, (ws2.web_sales / ws1.web_sales) AS web_q1_q2_increase, (ss2.store_sales / ss1.store_sales) AS store_q1_q2_increase, (ws3.web_sales / ws2.web_sales) AS web_q2_q3_increase, (ss3.store_sales / ss2.store_sales) AS store_q2_q3_increase FROM (SELECT customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales FROM store_sales JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) JOIN customer_address ON (store_sales.ss_addr_sk = customer_address.ca_address_sk) GROUP BY customer_address.ca_county, date_dim.d_qoy, date_dim.d_year) AS ss1 JOIN (SELECT customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales FROM store_sales JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) JOIN customer_address ON (store_sales.ss_addr_sk = customer_address.ca_address_sk) GROUP BY customer_address.ca_county, date_dim.d_qoy, date_dim.d_year) AS ss2 ON (ss1.ca_county = ss2.ca_county) JOIN (SELECT customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales FROM store_sales JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) JOIN customer_address ON (store_sales.ss_addr_sk = customer_address.ca_address_sk) GROUP BY customer_address.ca_county, date_dim.d_qoy, date_dim.d_year) AS ss3 ON (ss2.ca_county = ss3.ca_county) JOIN (SELECT customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(web_sales.ws_ext_sales_price) AS web_sales FROM web_sales JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) JOIN customer_address ON (web_sales.ws_bill_addr_sk = customer_address.ca_address_sk) GROUP BY customer_address.ca_county, date_dim.d_qoy, date_dim.d_year) AS ws1 ON (ss1.ca_county = ws1.ca_county) JOIN (SELECT customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(web_sales.ws_ext_sales_price) AS web_sales FROM web_sales JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) JOIN customer_address ON (web_sales.ws_bill_addr_sk = customer_address.ca_address_sk) GROUP BY customer_address.ca_county, date_dim.d_qoy, date_dim.d_year) AS ws2 ON ((ws1.ca_county = ws2.ca_county) AND (CASE WHEN (ws1.web_sales > 0) THEN (ws2.web_sales / ws1.web_sales) ELSE NULL END > CASE WHEN (ss1.store_sales > 0) THEN (ss2.store_sales / ss1.store_sales) ELSE NULL END)) JOIN (SELECT customer_address.ca_county, date_dim.d_qoy, date_dim.d_year, sum(web_sales.ws_ext_sales_price) AS web_sales FROM web_sales JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) JOIN customer_address ON (web_sales.ws_bill_addr_sk = customer_address.ca_address_sk) GROUP BY customer_address.ca_county, date_dim.d_qoy, date_dim.d_year) AS ws3 ON ((ws1.ca_county = ws3.ca_county) AND (CASE WHEN (ws2.web_sales > 0) THEN (ws3.web_sales / ws2.web_sales) ELSE NULL END > CASE WHEN (ss2.store_sales > 0) THEN (ss3.store_sales / ss2.store_sales) ELSE NULL END)) WHERE ((ss1.d_qoy = 1) AND (ss1.d_year = 1999)) AND ((ss2.d_qoy = 2) AND (ss2.d_year = 1999)) AND ((ss2.d_qoy = 2) AND (ss2.d_year = 1999)) AND ((ss3.d_qoy = 3) AND (ss3.d_year = 1999)) AND ((ss3.d_qoy = 3) AND (ss3.d_year = 1999)) AND ((ws1.d_qoy = 1) AND (ws1.d_year = 1999)) AND ((ws1.d_qoy = 1) AND (ws1.d_year = 1999)) AND ((ws2.d_qoy = 2) AND (ws2.d_year = 1999)) AND ((ws2.d_qoy = 2) AND (ws2.d_year = 1999)) AND ((ws3.d_qoy = 3) AND (ws3.d_year = 1999)) AND ((ws3.d_qoy = 3) AND (ws3.d_year = 1999)) ORDER BY ss1.ca_county ASC NULLS LAST rewritten_sql=SELECT `ss1`.`ca_county`, `ss1`.`d_year`, (`ws2`.`web_sales` / `ws1`.`web_sales`) AS `web_q1_q2_increase`, (`ss2`.`store_sales` / `ss1`.`store_sales`) AS `store_q1_q2_increase`, (`ws3`.`web_sales` / `ws2`.`web_sales`) AS `web_q2_q3_increase`, (`ss3`.`store_sales` / `ss2`.`store_sales`) AS `store_q2_q3_increase` FROM (SELECT `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`, sum(`store_sales`.`ss_ext_sales_price`) AS `store_sales` FROM `store_sales` JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) JOIN `customer_address` ON (`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`) AS `ss1` JOIN (SELECT `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`, sum(`store_sales`.`ss_ext_sales_price`) AS `store_sales` FROM `store_sales` JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) JOIN `customer_address` ON (`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`) AS `ss2` ON (`ss1`.`ca_county` = `ss2`.`ca_county`) JOIN (SELECT `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`, sum(`store_sales`.`ss_ext_sales_price`) AS `store_sales` FROM `store_sales` JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) JOIN `customer_address` ON (`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`) AS `ss3` ON (`ss2`.`ca_county` = `ss3`.`ca_county`) JOIN (SELECT `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`, sum(`web_sales`.`ws_ext_sales_price`) AS `web_sales` FROM `web_sales` JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) JOIN `customer_address` ON (`web_sales`.`ws_bill_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`) AS `ws1` ON (`ss1`.`ca_county` = `ws1`.`ca_county`) JOIN (SELECT `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`, sum(`web_sales`.`ws_ext_sales_price`) AS `web_sales` FROM `web_sales` JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) JOIN `customer_address` ON (`web_sales`.`ws_bill_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`) AS `ws2` ON ((`ws1`.`ca_county` = `ws2`.`ca_county`) AND (CASE WHEN (`ws1`.`web_sales` > 0) THEN (`ws2`.`web_sales` / `ws1`.`web_sales`) ELSE NULL END > CASE WHEN (`ss1`.`store_sales` > 0) THEN (`ss2`.`store_sales` / `ss1`.`store_sales`) ELSE NULL END)) JOIN (SELECT `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`, sum(`web_sales`.`ws_ext_sales_price`) AS `web_sales` FROM `web_sales` JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) JOIN `customer_address` ON (`web_sales`.`ws_bill_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `customer_address`.`ca_county`, `date_dim`.`d_qoy`, `date_dim`.`d_year`) AS `ws3` ON ((`ws1`.`ca_county` = `ws3`.`ca_county`) AND (CASE WHEN (`ws2`.`web_sales` > 0) THEN (`ws3`.`web_sales` / `ws2`.`web_sales`) ELSE NULL END > CASE WHEN (`ss2`.`store_sales` > 0) THEN (`ss3`.`store_sales` / `ss2`.`store_sales`) ELSE NULL END)) WHERE ((`ss1`.`d_qoy` = 1) AND (`ss1`.`d_year` = 1999)) AND ((`ss2`.`d_qoy` = 2) AND (`ss2`.`d_year` = 1999)) AND ((`ss2`.`d_qoy` = 2) AND (`ss2`.`d_year` = 1999)) AND ((`ss3`.`d_qoy` = 3) AND (`ss3`.`d_year` = 1999)) AND ((`ss3`.`d_qoy` = 3) AND (`ss3`.`d_year` = 1999)) AND ((`ws1`.`d_qoy` = 1) AND (`ws1`.`d_year` = 1999)) AND ((`ws1`.`d_qoy` = 1) AND (`ws1`.`d_year` = 1999)) AND ((`ws2`.`d_qoy` = 2) AND (`ws2`.`d_year` = 1999)) AND ((`ws2`.`d_qoy` = 2) AND (`ws2`.`d_year` = 1999)) AND ((`ws3`.`d_qoy` = 3) AND (`ws3`.`d_year` = 1999)) AND ((`ws3`.`d_qoy` = 3) AND (`ws3`.`d_year` = 1999)) ORDER BY `ss1`.`ca_county` ASC NULLS LAST | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q32_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q32_explain.snap new file mode 100644 index 0000000000..ddc0764beb --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q32_explain.snap @@ -0,0 +1,31 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q32" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: sum(catalog_sales.cs_ext_discount_amt) AS excess discount amount | +| | Aggregate: groupBy=[[]], aggr=[[sum(catalog_sales.cs_ext_discount_amt)]] | +| | Inner Join: Filter: date_dim.d_date_sk = catalog_sales.cs_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = catalog_sales.cs_item_sk | +| | Filter: catalog_sales.cs_ext_discount_amt > () | +| | Subquery: | +| | Projection: Float64(1.3) * avg(catalog_sales.cs_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[avg(catalog_sales.cs_ext_discount_amt)]] | +| | Filter: catalog_sales.cs_item_sk = outer_ref(item.i_item_sk) AND date_dim.d_date BETWEEN Utf8("1999-02-22") AND CAST(Utf8("1999-02-22") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 90, nanoseconds: 0 }") AND date_dim.d_date_sk = catalog_sales.cs_sold_date_sk | +| | Cross Join: | +| | TableScan: catalog_sales | +| | TableScan: date_dim | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt] | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_manufact_id = Int64(283)] | +| | Filter: date_dim.d_date BETWEEN Utf8("1999-02-22") AND CAST(Utf8("1999-02-22") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 90, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT sum(catalog_sales.cs_ext_discount_amt) AS "excess discount amount" FROM catalog_sales JOIN item ON ((item.i_item_sk = catalog_sales.cs_item_sk) AND ((catalog_sales.cs_ext_discount_amt > (SELECT (1.3 * avg(catalog_sales.cs_ext_discount_amt)) FROM catalog_sales CROSS JOIN date_dim WHERE (((catalog_sales.cs_item_sk = item.i_item_sk) AND (date_dim.d_date BETWEEN '1999-02-22' AND (CAST('1999-02-22' AS DATE) + INTERVAL '90 DAYS'))) AND (date_dim.d_date_sk = catalog_sales.cs_sold_date_sk)))) AND (item.i_manufact_id = 283))) JOIN date_dim ON ((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk) AND (date_dim.d_date BETWEEN '1999-02-22' AND (CAST('1999-02-22' AS DATE) + INTERVAL '90 DAYS'))) LIMIT 100 rewritten_sql=SELECT sum(`catalog_sales`.`cs_ext_discount_amt`) AS `excess discount amount` FROM `catalog_sales` JOIN `item` ON ((`item`.`i_item_sk` = `catalog_sales`.`cs_item_sk`) AND ((`catalog_sales`.`cs_ext_discount_amt` > (SELECT (1.3 * avg(`catalog_sales`.`cs_ext_discount_amt`)) FROM `catalog_sales` CROSS JOIN `date_dim` WHERE (((`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) AND (`date_dim`.`d_date` BETWEEN '1999-02-22' AND (CAST(date(CAST('1999-02-22' AS TEXT), '+90 days') AS TEXT)))) AND (`date_dim`.`d_date_sk` = `catalog_sales`.`cs_sold_date_sk`)))) AND (`item`.`i_manufact_id` = 283))) JOIN `date_dim` ON ((`date_dim`.`d_date_sk` = `catalog_sales`.`cs_sold_date_sk`) AND (`date_dim`.`d_date` BETWEEN '1999-02-22' AND (CAST(date(CAST('1999-02-22' AS TEXT), '+90 days') AS TEXT)))) LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q33_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q33_explain.snap new file mode 100644 index 0000000000..8445040e89 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q33_explain.snap @@ -0,0 +1,69 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q33" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: total_sales ASC NULLS LAST | +| | Projection: tmp1.i_manufact_id, sum(tmp1.total_sales) AS total_sales | +| | Aggregate: groupBy=[[tmp1.i_manufact_id]], aggr=[[sum(tmp1.total_sales)]] | +| | SubqueryAlias: tmp1 | +| | Union | +| | Union | +| | Projection: ss.i_manufact_id, ss.total_sales | +| | SubqueryAlias: ss | +| | Projection: item.i_manufact_id, sum(store_sales.ss_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1999), date_dim.d_moy = Int64(4)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-5)] | +| | Filter: item.i_manufact_id IN () | +| | Subquery: | +| | Projection: item.i_manufact_id | +| | Filter: item.i_category IN ([Utf8("Books")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_manufact_id] | +| | Projection: cs.i_manufact_id, cs.total_sales | +| | SubqueryAlias: cs | +| | Projection: item.i_manufact_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | Inner Join: Filter: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1999), date_dim.d_moy = Int64(4)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-5)] | +| | Filter: item.i_manufact_id IN () | +| | Subquery: | +| | Projection: item.i_manufact_id | +| | Filter: item.i_category IN ([Utf8("Books")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_manufact_id] | +| | Projection: ws.i_manufact_id, ws.total_sales | +| | SubqueryAlias: ws | +| | Projection: item.i_manufact_id, sum(web_sales.ws_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_item_sk = item.i_item_sk | +| | Inner Join: Filter: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1999), date_dim.d_moy = Int64(4)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-5)] | +| | Filter: item.i_manufact_id IN () | +| | Subquery: | +| | Projection: item.i_manufact_id | +| | Filter: item.i_category IN ([Utf8("Books")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_manufact_id] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT tmp1.i_manufact_id, sum(tmp1.total_sales) AS total_sales FROM (SELECT ss.i_manufact_id, ss.total_sales FROM (SELECT item.i_manufact_id, sum(store_sales.ss_ext_sales_price) AS total_sales FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 1999) AND (date_dim.d_moy = 4))) JOIN customer_address ON ((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -5)) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND item.i_manufact_id IN (SELECT item.i_manufact_id FROM item WHERE item.i_category IN ('Books'))) GROUP BY item.i_manufact_id) AS ss UNION ALL SELECT cs.i_manufact_id, cs.total_sales FROM (SELECT item.i_manufact_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales FROM catalog_sales JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 1999) AND (date_dim.d_moy = 4))) JOIN customer_address ON ((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -5)) JOIN item ON ((catalog_sales.cs_item_sk = item.i_item_sk) AND item.i_manufact_id IN (SELECT item.i_manufact_id FROM item WHERE item.i_category IN ('Books'))) GROUP BY item.i_manufact_id) AS cs UNION ALL SELECT ws.i_manufact_id, ws.total_sales FROM (SELECT item.i_manufact_id, sum(web_sales.ws_ext_sales_price) AS total_sales FROM web_sales JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 1999) AND (date_dim.d_moy = 4))) JOIN customer_address ON ((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -5)) JOIN item ON ((web_sales.ws_item_sk = item.i_item_sk) AND item.i_manufact_id IN (SELECT item.i_manufact_id FROM item WHERE item.i_category IN ('Books'))) GROUP BY item.i_manufact_id) AS ws) AS tmp1 GROUP BY tmp1.i_manufact_id ORDER BY total_sales ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `tmp1`.`i_manufact_id`, sum(`tmp1`.`total_sales`) AS `total_sales` FROM (SELECT `ss`.`i_manufact_id`, `ss`.`total_sales` FROM (SELECT `item`.`i_manufact_id`, sum(`store_sales`.`ss_ext_sales_price`) AS `total_sales` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 1999) AND (`date_dim`.`d_moy` = 4))) JOIN `customer_address` ON ((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -5)) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND `item`.`i_manufact_id` IN (SELECT `item`.`i_manufact_id` FROM `item` WHERE `item`.`i_category` IN ('Books'))) GROUP BY `item`.`i_manufact_id`) AS `ss` UNION ALL SELECT `cs`.`i_manufact_id`, `cs`.`total_sales` FROM (SELECT `item`.`i_manufact_id`, sum(`catalog_sales`.`cs_ext_sales_price`) AS `total_sales` FROM `catalog_sales` JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 1999) AND (`date_dim`.`d_moy` = 4))) JOIN `customer_address` ON ((`catalog_sales`.`cs_bill_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -5)) JOIN `item` ON ((`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) AND `item`.`i_manufact_id` IN (SELECT `item`.`i_manufact_id` FROM `item` WHERE `item`.`i_category` IN ('Books'))) GROUP BY `item`.`i_manufact_id`) AS `cs` UNION ALL SELECT `ws`.`i_manufact_id`, `ws`.`total_sales` FROM (SELECT `item`.`i_manufact_id`, sum(`web_sales`.`ws_ext_sales_price`) AS `total_sales` FROM `web_sales` JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 1999) AND (`date_dim`.`d_moy` = 4))) JOIN `customer_address` ON ((`web_sales`.`ws_bill_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -5)) JOIN `item` ON ((`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) AND `item`.`i_manufact_id` IN (SELECT `item`.`i_manufact_id` FROM `item` WHERE `item`.`i_category` IN ('Books'))) GROUP BY `item`.`i_manufact_id`) AS `ws`) AS `tmp1` GROUP BY `tmp1`.`i_manufact_id` ORDER BY `total_sales` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q34_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q34_explain.snap new file mode 100644 index 0000000000..1b0d244cec --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q34_explain.snap @@ -0,0 +1,31 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q34" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_preferred_cust_flag DESC NULLS FIRST, dn.ss_ticket_number ASC NULLS LAST | +| | Projection: customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dn.ss_ticket_number, dn.cnt | +| | Inner Join: Filter: dn.ss_customer_sk = customer.c_customer_sk | +| | Filter: dn.cnt BETWEEN Int64(15) AND Int64(20) | +| | SubqueryAlias: dn | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(*) AS cnt | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] | +| | Filter: date_dim.d_dom BETWEEN Int64(1) AND Int64(3) OR date_dim.d_dom BETWEEN Int64(25) AND Int64(28) | +| | TableScan: date_dim projection=[d_date_sk, d_dom], full_filters=[date_dim.d_year IN ([Int64(2000), Int64(2000) + Int64(1), Int64(2000) + Int64(2)])] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_county IN ([Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County")])] | +| | Filter: CASE WHEN household_demographics.hd_vehicle_count > Int64(0) THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END > Float64(1.2) | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], full_filters=[household_demographics.hd_buy_potential = Utf8("501-1000") OR household_demographics.hd_buy_potential = Utf8("Unknown"), household_demographics.hd_vehicle_count > Int64(0)] | +| | TableScan: customer projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dn.ss_ticket_number, dn.cnt FROM (SELECT store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(*) AS cnt FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (((date_dim.d_dom BETWEEN 1 AND 3) OR (date_dim.d_dom BETWEEN 25 AND 28)) AND date_dim.d_year IN (2000, (2000 + 1), (2000 + 2)))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND store.s_county IN ('Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County')) JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND (((CASE WHEN (household_demographics.hd_vehicle_count > 0) THEN (household_demographics.hd_dep_count / household_demographics.hd_vehicle_count) ELSE NULL END > 1.2) AND ((household_demographics.hd_buy_potential = '501-1000') OR (household_demographics.hd_buy_potential = 'Unknown'))) AND (household_demographics.hd_vehicle_count > 0))) GROUP BY store_sales.ss_ticket_number, store_sales.ss_customer_sk) AS dn JOIN customer ON (dn.ss_customer_sk = customer.c_customer_sk) WHERE (dn.cnt BETWEEN 15 AND 20) ORDER BY customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_preferred_cust_flag DESC NULLS FIRST, dn.ss_ticket_number ASC NULLS LAST rewritten_sql=SELECT `customer`.`c_last_name`, `customer`.`c_first_name`, `customer`.`c_salutation`, `customer`.`c_preferred_cust_flag`, `dn`.`ss_ticket_number`, `dn`.`cnt` FROM (SELECT `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, count(*) AS `cnt` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (((`date_dim`.`d_dom` BETWEEN 1 AND 3) OR (`date_dim`.`d_dom` BETWEEN 25 AND 28)) AND `date_dim`.`d_year` IN (2000, (2000 + 1), (2000 + 2)))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND `store`.`s_county` IN ('Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County', 'Williamson County')) JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (((CASE WHEN (`household_demographics`.`hd_vehicle_count` > 0) THEN (`household_demographics`.`hd_dep_count` / `household_demographics`.`hd_vehicle_count`) ELSE NULL END > 1.2) AND ((`household_demographics`.`hd_buy_potential` = '501-1000') OR (`household_demographics`.`hd_buy_potential` = 'Unknown'))) AND (`household_demographics`.`hd_vehicle_count` > 0))) GROUP BY `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`) AS `dn` JOIN `customer` ON (`dn`.`ss_customer_sk` = `customer`.`c_customer_sk`) WHERE (`dn`.`cnt` BETWEEN 15 AND 20) ORDER BY `customer`.`c_last_name` ASC NULLS LAST, `customer`.`c_first_name` ASC NULLS LAST, `customer`.`c_salutation` ASC NULLS LAST, `customer`.`c_preferred_cust_flag` DESC NULLS FIRST, `dn`.`ss_ticket_number` ASC NULLS LAST | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q37_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q37_explain.snap new file mode 100644 index 0000000000..f7834b659e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q37_explain.snap @@ -0,0 +1,28 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q37" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: item.i_item_id ASC NULLS LAST | +| | Projection: item.i_item_id, item.i_item_desc, item.i_current_price | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_current_price]], aggr=[[]] | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = inventory.inv_date_sk | +| | Inner Join: Filter: inventory.inv_item_sk = item.i_item_sk | +| | Filter: item.i_current_price BETWEEN Int64(26) AND Int64(26) + Int64(30) | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], full_filters=[item.i_manufact_id IN ([Int64(744), Int64(884), Int64(722), Int64(693)])] | +| | Filter: inventory.inv_quantity_on_hand BETWEEN Int64(100) AND Int64(500) | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand] | +| | Filter: date_dim.d_date BETWEEN CAST(Utf8("2001-06-09") AS Date32) AND CAST(Utf8("2001-06-09") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 60, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | TableScan: catalog_sales projection=[cs_item_sk] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, item.i_item_desc, item.i_current_price FROM item JOIN inventory ON ((inventory.inv_item_sk = item.i_item_sk) AND (((item.i_current_price BETWEEN 26 AND (26 + 30)) AND item.i_manufact_id IN (744, 884, 722, 693)) AND (inventory.inv_quantity_on_hand BETWEEN 100 AND 500))) JOIN date_dim ON ((date_dim.d_date_sk = inventory.inv_date_sk) AND (date_dim.d_date BETWEEN CAST('2001-06-09' AS DATE) AND (CAST('2001-06-09' AS DATE) + INTERVAL '60 DAYS'))) JOIN catalog_sales ON (catalog_sales.cs_item_sk = item.i_item_sk) GROUP BY item.i_item_id, item.i_item_desc, item.i_current_price ORDER BY item.i_item_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_current_price` FROM `item` JOIN `inventory` ON ((`inventory`.`inv_item_sk` = `item`.`i_item_sk`) AND (((`item`.`i_current_price` BETWEEN 26 AND (26 + 30)) AND `item`.`i_manufact_id` IN (744, 884, 722, 693)) AND (`inventory`.`inv_quantity_on_hand` BETWEEN 100 AND 500))) JOIN `date_dim` ON ((`date_dim`.`d_date_sk` = `inventory`.`inv_date_sk`) AND (`date_dim`.`d_date` BETWEEN CAST('2001-06-09' AS TEXT) AND (CAST(date(CAST('2001-06-09' AS TEXT), '+60 days') AS TEXT)))) JOIN `catalog_sales` ON (`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) GROUP BY `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_current_price` ORDER BY `item`.`i_item_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q3_explain.snap new file mode 100644 index 0000000000..eaa7daa0c0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q3_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q3" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: dt.d_year ASC NULLS LAST, sum_agg DESC NULLS FIRST, brand_id ASC NULLS LAST | +| | Projection: dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_net_profit) AS sum_agg | +| | Aggregate: groupBy=[[dt.d_year, item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_net_profit)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: dt.d_date_sk = store_sales.ss_sold_date_sk | +| | Filter: dt.d_moy = Int64(12) | +| | SubqueryAlias: dt | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_net_profit] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manufact_id = Int64(445)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_net_profit) AS sum_agg FROM date_dim AS dt JOIN store_sales ON ((dt.d_date_sk = store_sales.ss_sold_date_sk) AND (dt.d_moy = 12)) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (item.i_manufact_id = 445)) GROUP BY dt.d_year, item.i_brand, item.i_brand_id ORDER BY dt.d_year ASC NULLS LAST, sum_agg DESC NULLS FIRST, brand_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `dt`.`d_year`, `item`.`i_brand_id` AS `brand_id`, `item`.`i_brand` AS `brand`, sum(`store_sales`.`ss_net_profit`) AS `sum_agg` FROM `date_dim` AS `dt` JOIN `store_sales` ON ((`dt`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND (`dt`.`d_moy` = 12)) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_manufact_id` = 445)) GROUP BY `dt`.`d_year`, `item`.`i_brand`, `item`.`i_brand_id` ORDER BY `dt`.`d_year` ASC NULLS LAST, `sum_agg` DESC NULLS FIRST, `brand_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q40_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q40_explain.snap new file mode 100644 index 0000000000..720707afcc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q40_explain.snap @@ -0,0 +1,29 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q40" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: warehouse.w_state ASC NULLS LAST, item.i_item_id ASC NULLS LAST | +| | Projection: warehouse.w_state, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END) AS sales_before, sum(CASE WHEN date_dim.d_date >= Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END) AS sales_after | +| | Aggregate: groupBy=[[warehouse.w_state, item.i_item_id]], aggr=[[sum(CASE WHEN CAST(date_dim.d_date AS Date32) < CAST(Utf8("2002-05-18") AS Date32) THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash, Int64(0)) ELSE Int64(0) END), sum(CASE WHEN CAST(date_dim.d_date AS Date32) >= CAST(Utf8("2002-05-18") AS Date32) THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash, Int64(0)) ELSE Int64(0) END)]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: item.i_item_sk = catalog_sales.cs_item_sk | +| | Inner Join: Filter: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk | +| | Left Join: Filter: catalog_sales.cs_order_number = catalog_returns.cr_order_number AND catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_warehouse_sk, cs_item_sk, cs_order_number, cs_sales_price] | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash] | +| | TableScan: warehouse projection=[w_warehouse_sk, w_state] | +| | Filter: item.i_current_price BETWEEN Float64(0.99) AND Float64(1.49) | +| | TableScan: item projection=[i_item_sk, i_item_id, i_current_price] | +| | Filter: date_dim.d_date BETWEEN CAST(Utf8("2002-05-18") AS Date32) - IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 30, nanoseconds: 0 }") AND CAST(Utf8("2002-05-18") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 30, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT "warehouse".w_state, item.i_item_id, sum(CASE WHEN (CAST(date_dim.d_date AS DATE) < CAST('2002-05-18' AS DATE)) THEN (catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash, 0)) ELSE 0 END) AS sales_before, sum(CASE WHEN (CAST(date_dim.d_date AS DATE) >= CAST('2002-05-18' AS DATE)) THEN (catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash, 0)) ELSE 0 END) AS sales_after FROM catalog_sales LEFT JOIN catalog_returns ON ((catalog_sales.cs_order_number = catalog_returns.cr_order_number) AND (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) JOIN "warehouse" ON (catalog_sales.cs_warehouse_sk = "warehouse".w_warehouse_sk) JOIN item ON ((item.i_item_sk = catalog_sales.cs_item_sk) AND (item.i_current_price BETWEEN 0.99 AND 1.49)) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_date BETWEEN (CAST('2002-05-18' AS DATE) - INTERVAL '30 DAYS') AND (CAST('2002-05-18' AS DATE) + INTERVAL '30 DAYS'))) GROUP BY "warehouse".w_state, item.i_item_id ORDER BY "warehouse".w_state ASC NULLS LAST, item.i_item_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `warehouse`.`w_state`, `item`.`i_item_id`, sum(CASE WHEN (CAST(`date_dim`.`d_date` AS TEXT) < CAST('2002-05-18' AS TEXT)) THEN (`catalog_sales`.`cs_sales_price` - coalesce(`catalog_returns`.`cr_refunded_cash`, 0)) ELSE 0 END) AS `sales_before`, sum(CASE WHEN (CAST(`date_dim`.`d_date` AS TEXT) >= CAST('2002-05-18' AS TEXT)) THEN (`catalog_sales`.`cs_sales_price` - coalesce(`catalog_returns`.`cr_refunded_cash`, 0)) ELSE 0 END) AS `sales_after` FROM `catalog_sales` LEFT JOIN `catalog_returns` ON ((`catalog_sales`.`cs_order_number` = `catalog_returns`.`cr_order_number`) AND (`catalog_sales`.`cs_item_sk` = `catalog_returns`.`cr_item_sk`)) JOIN `warehouse` ON (`catalog_sales`.`cs_warehouse_sk` = `warehouse`.`w_warehouse_sk`) JOIN `item` ON ((`item`.`i_item_sk` = `catalog_sales`.`cs_item_sk`) AND (`item`.`i_current_price` BETWEEN 0.99 AND 1.49)) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_date` BETWEEN (CAST(date(CAST('2002-05-18' AS TEXT), '-30 days') AS TEXT)) AND (CAST(date(CAST('2002-05-18' AS TEXT), '+30 days') AS TEXT)))) GROUP BY `warehouse`.`w_state`, `item`.`i_item_id` ORDER BY `warehouse`.`w_state` ASC NULLS LAST, `item`.`i_item_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q41_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q41_explain.snap new file mode 100644 index 0000000000..b1f22e2254 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q41_explain.snap @@ -0,0 +1,26 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q41" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: i1.i_product_name ASC NULLS LAST | +| | Distinct: | +| | Projection: i1.i_product_name | +| | Filter: i1.i_manufact_id BETWEEN Int64(668) AND Int64(668) + Int64(40) AND () > Int64(0) | +| | Subquery: | +| | Projection: count(*) AS item_cnt | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Filter: item.i_manufact = outer_ref(i1.i_manufact) AND (item.i_category = Utf8("Women") AND (item.i_color = Utf8("cream") OR item.i_color = Utf8("ghost")) AND (item.i_units = Utf8("Ton") OR item.i_units = Utf8("Gross")) AND (item.i_size = Utf8("economy") OR item.i_size = Utf8("small")) OR item.i_category = Utf8("Women") AND (item.i_color = Utf8("midnight") OR item.i_color = Utf8("burlywood")) AND (item.i_units = Utf8("Tsp") OR item.i_units = Utf8("Bundle")) AND (item.i_size = Utf8("medium") OR item.i_size = Utf8("extra large")) OR item.i_category = Utf8("Men") AND (item.i_color = Utf8("lavender") OR item.i_color = Utf8("azure")) AND (item.i_units = Utf8("Each") OR item.i_units = Utf8("Lb")) AND (item.i_size = Utf8("large") OR item.i_size = Utf8("N/A")) OR item.i_category = Utf8("Men") AND (item.i_color = Utf8("chocolate") OR item.i_color = Utf8("steel")) AND (item.i_units = Utf8("N/A") OR item.i_units = Utf8("Dozen")) AND (item.i_size = Utf8("economy") OR item.i_size = Utf8("small"))) OR item.i_manufact = outer_ref(i1.i_manufact) AND (item.i_category = Utf8("Women") AND (item.i_color = Utf8("floral") OR item.i_color = Utf8("royal")) AND (item.i_units = Utf8("Unknown") OR item.i_units = Utf8("Tbl")) AND (item.i_size = Utf8("economy") OR item.i_size = Utf8("small")) OR item.i_category = Utf8("Women") AND (item.i_color = Utf8("navy") OR item.i_color = Utf8("forest")) AND (item.i_units = Utf8("Bunch") OR item.i_units = Utf8("Dram")) AND (item.i_size = Utf8("medium") OR item.i_size = Utf8("extra large")) OR item.i_category = Utf8("Men") AND (item.i_color = Utf8("cyan") OR item.i_color = Utf8("indian")) AND (item.i_units = Utf8("Carton") OR item.i_units = Utf8("Cup")) AND (item.i_size = Utf8("large") OR item.i_size = Utf8("N/A")) OR item.i_category = Utf8("Men") AND (item.i_color = Utf8("coral") OR item.i_color = Utf8("pale")) AND (item.i_units = Utf8("Pallet") OR item.i_units = Utf8("Gram")) AND (item.i_size = Utf8("economy") OR item.i_size = Utf8("small"))) | +| | TableScan: item | +| | SubqueryAlias: i1 | +| | TableScan: item projection=[i_manufact_id, i_manufact, i_product_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT DISTINCT i1.i_product_name FROM item AS i1 WHERE ((i1.i_manufact_id BETWEEN 668 AND (668 + 40)) AND ((SELECT count(*) AS item_cnt FROM item WHERE (((item.i_manufact = i1.i_manufact) AND (((((((item.i_category = 'Women') AND ((item.i_color = 'cream') OR (item.i_color = 'ghost'))) AND ((item.i_units = 'Ton') OR (item.i_units = 'Gross'))) AND ((item.i_size = 'economy') OR (item.i_size = 'small'))) OR ((((item.i_category = 'Women') AND ((item.i_color = 'midnight') OR (item.i_color = 'burlywood'))) AND ((item.i_units = 'Tsp') OR (item.i_units = 'Bundle'))) AND ((item.i_size = 'medium') OR (item.i_size = 'extra large')))) OR ((((item.i_category = 'Men') AND ((item.i_color = 'lavender') OR (item.i_color = 'azure'))) AND ((item.i_units = 'Each') OR (item.i_units = 'Lb'))) AND ((item.i_size = 'large') OR (item.i_size = 'N/A')))) OR ((((item.i_category = 'Men') AND ((item.i_color = 'chocolate') OR (item.i_color = 'steel'))) AND ((item.i_units = 'N/A') OR (item.i_units = 'Dozen'))) AND ((item.i_size = 'economy') OR (item.i_size = 'small'))))) OR ((item.i_manufact = i1.i_manufact) AND (((((((item.i_category = 'Women') AND ((item.i_color = 'floral') OR (item.i_color = 'royal'))) AND ((item.i_units = 'Unknown') OR (item.i_units = 'Tbl'))) AND ((item.i_size = 'economy') OR (item.i_size = 'small'))) OR ((((item.i_category = 'Women') AND ((item.i_color = 'navy') OR (item.i_color = 'forest'))) AND ((item.i_units = 'Bunch') OR (item.i_units = 'Dram'))) AND ((item.i_size = 'medium') OR (item.i_size = 'extra large')))) OR ((((item.i_category = 'Men') AND ((item.i_color = 'cyan') OR (item.i_color = 'indian'))) AND ((item.i_units = 'Carton') OR (item.i_units = 'Cup'))) AND ((item.i_size = 'large') OR (item.i_size = 'N/A')))) OR ((((item.i_category = 'Men') AND ((item.i_color = 'coral') OR (item.i_color = 'pale'))) AND ((item.i_units = 'Pallet') OR (item.i_units = 'Gram'))) AND ((item.i_size = 'economy') OR (item.i_size = 'small'))))))) > 0)) ORDER BY i1.i_product_name ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT DISTINCT `i1`.`i_product_name` FROM `item` AS `i1` WHERE ((`i1`.`i_manufact_id` BETWEEN 668 AND (668 + 40)) AND ((SELECT count(*) AS `item_cnt` FROM `item` WHERE (((`item`.`i_manufact` = `i1`.`i_manufact`) AND (((((((`item`.`i_category` = 'Women') AND ((`item`.`i_color` = 'cream') OR (`item`.`i_color` = 'ghost'))) AND ((`item`.`i_units` = 'Ton') OR (`item`.`i_units` = 'Gross'))) AND ((`item`.`i_size` = 'economy') OR (`item`.`i_size` = 'small'))) OR ((((`item`.`i_category` = 'Women') AND ((`item`.`i_color` = 'midnight') OR (`item`.`i_color` = 'burlywood'))) AND ((`item`.`i_units` = 'Tsp') OR (`item`.`i_units` = 'Bundle'))) AND ((`item`.`i_size` = 'medium') OR (`item`.`i_size` = 'extra large')))) OR ((((`item`.`i_category` = 'Men') AND ((`item`.`i_color` = 'lavender') OR (`item`.`i_color` = 'azure'))) AND ((`item`.`i_units` = 'Each') OR (`item`.`i_units` = 'Lb'))) AND ((`item`.`i_size` = 'large') OR (`item`.`i_size` = 'N/A')))) OR ((((`item`.`i_category` = 'Men') AND ((`item`.`i_color` = 'chocolate') OR (`item`.`i_color` = 'steel'))) AND ((`item`.`i_units` = 'N/A') OR (`item`.`i_units` = 'Dozen'))) AND ((`item`.`i_size` = 'economy') OR (`item`.`i_size` = 'small'))))) OR ((`item`.`i_manufact` = `i1`.`i_manufact`) AND (((((((`item`.`i_category` = 'Women') AND ((`item`.`i_color` = 'floral') OR (`item`.`i_color` = 'royal'))) AND ((`item`.`i_units` = 'Unknown') OR (`item`.`i_units` = 'Tbl'))) AND ((`item`.`i_size` = 'economy') OR (`item`.`i_size` = 'small'))) OR ((((`item`.`i_category` = 'Women') AND ((`item`.`i_color` = 'navy') OR (`item`.`i_color` = 'forest'))) AND ((`item`.`i_units` = 'Bunch') OR (`item`.`i_units` = 'Dram'))) AND ((`item`.`i_size` = 'medium') OR (`item`.`i_size` = 'extra large')))) OR ((((`item`.`i_category` = 'Men') AND ((`item`.`i_color` = 'cyan') OR (`item`.`i_color` = 'indian'))) AND ((`item`.`i_units` = 'Carton') OR (`item`.`i_units` = 'Cup'))) AND ((`item`.`i_size` = 'large') OR (`item`.`i_size` = 'N/A')))) OR ((((`item`.`i_category` = 'Men') AND ((`item`.`i_color` = 'coral') OR (`item`.`i_color` = 'pale'))) AND ((`item`.`i_units` = 'Pallet') OR (`item`.`i_units` = 'Gram'))) AND ((`item`.`i_size` = 'economy') OR (`item`.`i_size` = 'small'))))))) > 0)) ORDER BY `i1`.`i_product_name` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q42_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q42_explain.snap new file mode 100644 index 0000000000..ea6280212e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q42_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q42" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: sum(store_sales.ss_ext_sales_price) DESC NULLS FIRST, dt.d_year ASC NULLS LAST, item.i_category_id ASC NULLS LAST, item.i_category ASC NULLS LAST | +| | Projection: dt.d_year, item.i_category_id, item.i_category, sum(store_sales.ss_ext_sales_price) | +| | Aggregate: groupBy=[[dt.d_year, item.i_category_id, item.i_category]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: dt.d_date_sk = store_sales.ss_sold_date_sk | +| | Filter: dt.d_moy = Int64(11) AND dt.d_year = Int64(1998) | +| | SubqueryAlias: dt | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_category_id, i_category], full_filters=[item.i_manager_id = Int64(1)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT dt.d_year, item.i_category_id, item.i_category, sum(store_sales.ss_ext_sales_price) FROM date_dim AS dt JOIN store_sales ON ((dt.d_date_sk = store_sales.ss_sold_date_sk) AND ((dt.d_moy = 11) AND (dt.d_year = 1998))) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (item.i_manager_id = 1)) GROUP BY dt.d_year, item.i_category_id, item.i_category ORDER BY sum(store_sales.ss_ext_sales_price) DESC NULLS FIRST, dt.d_year ASC NULLS LAST, item.i_category_id ASC NULLS LAST, item.i_category ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `dt`.`d_year`, `item`.`i_category_id`, `item`.`i_category`, sum(`store_sales`.`ss_ext_sales_price`) FROM `date_dim` AS `dt` JOIN `store_sales` ON ((`dt`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND ((`dt`.`d_moy` = 11) AND (`dt`.`d_year` = 1998))) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_manager_id` = 1)) GROUP BY `dt`.`d_year`, `item`.`i_category_id`, `item`.`i_category` ORDER BY sum(`store_sales`.`ss_ext_sales_price`) DESC NULLS FIRST, `dt`.`d_year` ASC NULLS LAST, `item`.`i_category_id` ASC NULLS LAST, `item`.`i_category` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q43_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q43_explain.snap new file mode 100644 index 0000000000..23a53184c6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q43_explain.snap @@ -0,0 +1,23 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q43" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: store.s_store_name ASC NULLS LAST, store.s_store_id ASC NULLS LAST, sun_sales ASC NULLS LAST, mon_sales ASC NULLS LAST, tue_sales ASC NULLS LAST, wed_sales ASC NULLS LAST, thu_sales ASC NULLS LAST, fri_sales ASC NULLS LAST, sat_sales ASC NULLS LAST | +| | Projection: store.s_store_name, store.s_store_id, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[store.s_store_name, store.s_store_id]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] | +| | Inner Join: Filter: store.s_store_sk = store_sales.ss_store_sk | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | TableScan: date_dim projection=[d_date_sk, d_day_name], full_filters=[date_dim.d_year = Int64(2000)] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | TableScan: store projection=[s_store_sk, s_store_id, s_store_name], full_filters=[store.s_gmt_offset = Int64(-5)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT store.s_store_name, store.s_store_id, sum(CASE WHEN (date_dim.d_day_name = 'Sunday') THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN (date_dim.d_day_name = 'Monday') THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN (date_dim.d_day_name = 'Tuesday') THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN (date_dim.d_day_name = 'Wednesday') THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN (date_dim.d_day_name = 'Thursday') THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN (date_dim.d_day_name = 'Friday') THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN (date_dim.d_day_name = 'Saturday') THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales FROM date_dim JOIN store_sales ON ((date_dim.d_date_sk = store_sales.ss_sold_date_sk) AND (date_dim.d_year = 2000)) JOIN store ON ((store.s_store_sk = store_sales.ss_store_sk) AND (store.s_gmt_offset = -5)) GROUP BY store.s_store_name, store.s_store_id ORDER BY store.s_store_name ASC NULLS LAST, store.s_store_id ASC NULLS LAST, sun_sales ASC NULLS LAST, mon_sales ASC NULLS LAST, tue_sales ASC NULLS LAST, wed_sales ASC NULLS LAST, thu_sales ASC NULLS LAST, fri_sales ASC NULLS LAST, sat_sales ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `store`.`s_store_name`, `store`.`s_store_id`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Sunday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `sun_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Monday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `mon_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Tuesday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `tue_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Wednesday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `wed_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Thursday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `thu_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Friday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `fri_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Saturday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `sat_sales` FROM `date_dim` JOIN `store_sales` ON ((`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND (`date_dim`.`d_year` = 2000)) JOIN `store` ON ((`store`.`s_store_sk` = `store_sales`.`ss_store_sk`) AND (`store`.`s_gmt_offset` = -5)) GROUP BY `store`.`s_store_name`, `store`.`s_store_id` ORDER BY `store`.`s_store_name` ASC NULLS LAST, `store`.`s_store_id` ASC NULLS LAST, `sun_sales` ASC NULLS LAST, `mon_sales` ASC NULLS LAST, `tue_sales` ASC NULLS LAST, `wed_sales` ASC NULLS LAST, `thu_sales` ASC NULLS LAST, `fri_sales` ASC NULLS LAST, `sat_sales` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q44_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q44_explain.snap new file mode 100644 index 0000000000..d4831f63a3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q44_explain.snap @@ -0,0 +1,60 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q44" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: asceding.rnk ASC NULLS LAST | +| | Projection: asceding.rnk, i1.i_product_name AS best_performing, i2.i_product_name AS worst_performing | +| | Inner Join: Filter: i2.i_item_sk = descending.item_sk | +| | Inner Join: Filter: i1.i_item_sk = asceding.item_sk | +| | Inner Join: Filter: asceding.rnk = descending.rnk | +| | SubqueryAlias: asceding | +| | Projection: V11.item_sk, V11.rnk | +| | Filter: V11.rnk < Int64(11) | +| | SubqueryAlias: V11 | +| | Projection: V1.item_sk, rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rnk | +| | WindowAggr: windowExpr=[[rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: V1 | +| | Projection: ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col | +| | Filter: avg(ss1.ss_net_profit) > Float64(0.9) * () | +| | Subquery: | +| | Projection: avg(store_sales.ss_net_profit) AS rank_col | +| | Aggregate: groupBy=[[store_sales.ss_store_sk]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | Filter: store_sales.ss_store_sk = Int64(6) AND store_sales.ss_hdemo_sk IS NULL | +| | TableScan: store_sales | +| | Aggregate: groupBy=[[ss1.ss_item_sk]], aggr=[[avg(ss1.ss_net_profit)]] | +| | Filter: ss1.ss_store_sk = Int64(6) | +| | SubqueryAlias: ss1 | +| | TableScan: store_sales projection=[ss_item_sk, ss_store_sk, ss_net_profit] | +| | SubqueryAlias: descending | +| | Projection: V21.item_sk, V21.rnk | +| | Filter: V21.rnk < Int64(11) | +| | SubqueryAlias: V21 | +| | Projection: V2.item_sk, rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rnk | +| | WindowAggr: windowExpr=[[rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: V2 | +| | Projection: ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col | +| | Filter: avg(ss1.ss_net_profit) > Float64(0.9) * () | +| | Subquery: | +| | Projection: avg(store_sales.ss_net_profit) AS rank_col | +| | Aggregate: groupBy=[[store_sales.ss_store_sk]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | Filter: store_sales.ss_store_sk = Int64(6) AND store_sales.ss_hdemo_sk IS NULL | +| | TableScan: store_sales | +| | Aggregate: groupBy=[[ss1.ss_item_sk]], aggr=[[avg(ss1.ss_net_profit)]] | +| | Filter: ss1.ss_store_sk = Int64(6) | +| | SubqueryAlias: ss1 | +| | TableScan: store_sales projection=[ss_item_sk, ss_store_sk, ss_net_profit] | +| | SubqueryAlias: i1 | +| | TableScan: item projection=[i_item_sk, i_product_name] | +| | SubqueryAlias: i2 | +| | TableScan: item projection=[i_item_sk, i_product_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT asceding.rnk, i1.i_product_name AS best_performing, i2.i_product_name AS worst_performing FROM (SELECT V11.item_sk, V11.rnk FROM (SELECT V1.item_sk, rank() OVER (ORDER BY V1.rank_col ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rnk FROM (SELECT ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col FROM store_sales AS ss1 WHERE (ss1.ss_store_sk = 6) GROUP BY ss1.ss_item_sk HAVING (avg(ss1.ss_net_profit) > (0.9 * (SELECT avg(store_sales.ss_net_profit) AS rank_col FROM store_sales WHERE ((store_sales.ss_store_sk = 6) AND store_sales.ss_hdemo_sk IS NULL) GROUP BY store_sales.ss_store_sk)))) AS V1) AS V11 WHERE (V11.rnk < 11)) AS asceding JOIN (SELECT V21.item_sk, V21.rnk FROM (SELECT V2.item_sk, rank() OVER (ORDER BY V2.rank_col DESC NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rnk FROM (SELECT ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col FROM store_sales AS ss1 WHERE (ss1.ss_store_sk = 6) GROUP BY ss1.ss_item_sk HAVING (avg(ss1.ss_net_profit) > (0.9 * (SELECT avg(store_sales.ss_net_profit) AS rank_col FROM store_sales WHERE ((store_sales.ss_store_sk = 6) AND store_sales.ss_hdemo_sk IS NULL) GROUP BY store_sales.ss_store_sk)))) AS V2) AS V21 WHERE (V21.rnk < 11)) AS descending ON (asceding.rnk = descending.rnk) JOIN item AS i1 ON (i1.i_item_sk = asceding.item_sk) JOIN item AS i2 ON (i2.i_item_sk = descending.item_sk) ORDER BY asceding.rnk ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `asceding`.`rnk`, `i1`.`i_product_name` AS `best_performing`, `i2`.`i_product_name` AS `worst_performing` FROM (SELECT `V11`.`item_sk`, `V11`.`rnk` FROM (SELECT `V1`.`item_sk`, rank() OVER (ORDER BY `V1`.`rank_col` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rnk` FROM (SELECT `ss1`.`ss_item_sk` AS `item_sk`, avg(`ss1`.`ss_net_profit`) AS `rank_col` FROM `store_sales` AS `ss1` WHERE (`ss1`.`ss_store_sk` = 6) GROUP BY `ss1`.`ss_item_sk` HAVING (avg(`ss1`.`ss_net_profit`) > (0.9 * (SELECT avg(`store_sales`.`ss_net_profit`) AS `rank_col` FROM `store_sales` WHERE ((`store_sales`.`ss_store_sk` = 6) AND `store_sales`.`ss_hdemo_sk` IS NULL) GROUP BY `store_sales`.`ss_store_sk`)))) AS `V1`) AS `V11` WHERE (`V11`.`rnk` < 11)) AS `asceding` JOIN (SELECT `V21`.`item_sk`, `V21`.`rnk` FROM (SELECT `V2`.`item_sk`, rank() OVER (ORDER BY `V2`.`rank_col` DESC NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rnk` FROM (SELECT `ss1`.`ss_item_sk` AS `item_sk`, avg(`ss1`.`ss_net_profit`) AS `rank_col` FROM `store_sales` AS `ss1` WHERE (`ss1`.`ss_store_sk` = 6) GROUP BY `ss1`.`ss_item_sk` HAVING (avg(`ss1`.`ss_net_profit`) > (0.9 * (SELECT avg(`store_sales`.`ss_net_profit`) AS `rank_col` FROM `store_sales` WHERE ((`store_sales`.`ss_store_sk` = 6) AND `store_sales`.`ss_hdemo_sk` IS NULL) GROUP BY `store_sales`.`ss_store_sk`)))) AS `V2`) AS `V21` WHERE (`V21`.`rnk` < 11)) AS `descending` ON (`asceding`.`rnk` = `descending`.`rnk`) JOIN `item` AS `i1` ON (`i1`.`i_item_sk` = `asceding`.`item_sk`) JOIN `item` AS `i2` ON (`i2`.`i_item_sk` = `descending`.`item_sk`) ORDER BY `asceding`.`rnk` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q45_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q45_explain.snap new file mode 100644 index 0000000000..ddf5178b36 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q45_explain.snap @@ -0,0 +1,32 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q45" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer_address.ca_zip ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST | +| | Projection: customer_address.ca_zip, customer_address.ca_city, sum(web_sales.ws_sales_price) | +| | Aggregate: groupBy=[[customer_address.ca_zip, customer_address.ca_city]], aggr=[[sum(web_sales.ws_sales_price)]] | +| | Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([Utf8("85669"), Utf8("86197"), Utf8("88274"), Utf8("83405"), Utf8("86475"), Utf8("85392"), Utf8("85460"), Utf8("80348"), Utf8("81792")]) OR item.i_item_id IN () | +| | Subquery: | +| | Projection: item.i_item_id | +| | Filter: item.i_item_sk IN ([Int64(2), Int64(3), Int64(5), Int64(7), Int64(11), Int64(13), Int64(17), Int64(19), Int64(23), Int64(29)]) | +| | TableScan: item | +| | Inner Join: Filter: web_sales.ws_item_sk = item.i_item_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_sales.ws_bill_customer_sk = customer.c_customer_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_sales_price] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | TableScan: customer_address projection=[ca_address_sk, ca_city, ca_zip] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_qoy = Int64(2), date_dim.d_year = Int64(2000)] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer_address.ca_zip, customer_address.ca_city, sum(web_sales.ws_sales_price) FROM web_sales JOIN customer ON (web_sales.ws_bill_customer_sk = customer.c_customer_sk) JOIN customer_address ON (customer.c_current_addr_sk = customer_address.ca_address_sk) JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_qoy = 2) AND (date_dim.d_year = 2000))) JOIN item ON (web_sales.ws_item_sk = item.i_item_sk) WHERE (substr(customer_address.ca_zip, 1, 5) IN ('85669', '86197', '88274', '83405', '86475', '85392', '85460', '80348', '81792') OR item.i_item_id IN (SELECT item.i_item_id FROM item WHERE item.i_item_sk IN (2, 3, 5, 7, 11, 13, 17, 19, 23, 29))) GROUP BY customer_address.ca_zip, customer_address.ca_city ORDER BY customer_address.ca_zip ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer_address`.`ca_zip`, `customer_address`.`ca_city`, sum(`web_sales`.`ws_sales_price`) FROM `web_sales` JOIN `customer` ON (`web_sales`.`ws_bill_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` ON (`customer`.`c_current_addr_sk` = `customer_address`.`ca_address_sk`) JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_qoy` = 2) AND (`date_dim`.`d_year` = 2000))) JOIN `item` ON (`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) WHERE (substr(`customer_address`.`ca_zip`, 1, 5) IN ('85669', '86197', '88274', '83405', '86475', '85392', '85460', '80348', '81792') OR `item`.`i_item_id` IN (SELECT `item`.`i_item_id` FROM `item` WHERE `item`.`i_item_sk` IN (2, 3, 5, 7, 11, 13, 17, 19, 23, 29))) GROUP BY `customer_address`.`ca_zip`, `customer_address`.`ca_city` ORDER BY `customer_address`.`ca_zip` ASC NULLS LAST, `customer_address`.`ca_city` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q46_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q46_explain.snap new file mode 100644 index 0000000000..f1a5af16e0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q46_explain.snap @@ -0,0 +1,34 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q46" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, current_addr.ca_city ASC NULLS LAST, dn.bought_city ASC NULLS LAST, dn.ss_ticket_number ASC NULLS LAST | +| | Projection: customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.amt, dn.profit | +| | Inner Join: Filter: customer.c_current_addr_sk = current_addr.ca_address_sk AND current_addr.ca_city != dn.bought_city | +| | Inner Join: Filter: dn.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: dn | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city]], aggr=[[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)]] | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_dow IN ([Int64(6), Int64(0)]), date_dim.d_year IN ([Int64(1999), Int64(1999) + Int64(1), Int64(1999) + Int64(2)])] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_city IN ([Utf8("Midway"), Utf8("Fairview"), Utf8("Fairview"), Utf8("Midway"), Utf8("Fairview")])] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(3) OR household_demographics.hd_vehicle_count = Int64(1)] | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | SubqueryAlias: current_addr | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.amt, dn.profit FROM (SELECT store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_dow IN (6, 0) AND date_dim.d_year IN (1999, (1999 + 1), (1999 + 2)))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND store.s_city IN ('Midway', 'Fairview', 'Fairview', 'Midway', 'Fairview')) JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((household_demographics.hd_dep_count = 3) OR (household_demographics.hd_vehicle_count = 1))) JOIN customer_address ON (store_sales.ss_addr_sk = customer_address.ca_address_sk) GROUP BY store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city) AS dn JOIN customer ON (dn.ss_customer_sk = customer.c_customer_sk) JOIN customer_address AS current_addr ON ((customer.c_current_addr_sk = current_addr.ca_address_sk) AND (current_addr.ca_city <> dn.bought_city)) ORDER BY customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, current_addr.ca_city ASC NULLS LAST, dn.bought_city ASC NULLS LAST, dn.ss_ticket_number ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer`.`c_last_name`, `customer`.`c_first_name`, `current_addr`.`ca_city`, `dn`.`bought_city`, `dn`.`ss_ticket_number`, `dn`.`amt`, `dn`.`profit` FROM (SELECT `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, `customer_address`.`ca_city` AS `bought_city`, sum(`store_sales`.`ss_coupon_amt`) AS `amt`, sum(`store_sales`.`ss_net_profit`) AS `profit` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_dow` IN (6, 0) AND `date_dim`.`d_year` IN (1999, (1999 + 1), (1999 + 2)))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND `store`.`s_city` IN ('Midway', 'Fairview', 'Fairview', 'Midway', 'Fairview')) JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((`household_demographics`.`hd_dep_count` = 3) OR (`household_demographics`.`hd_vehicle_count` = 1))) JOIN `customer_address` ON (`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, `store_sales`.`ss_addr_sk`, `customer_address`.`ca_city`) AS `dn` JOIN `customer` ON (`dn`.`ss_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` AS `current_addr` ON ((`customer`.`c_current_addr_sk` = `current_addr`.`ca_address_sk`) AND (`current_addr`.`ca_city` <> `dn`.`bought_city`)) ORDER BY `customer`.`c_last_name` ASC NULLS LAST, `customer`.`c_first_name` ASC NULLS LAST, `current_addr`.`ca_city` ASC NULLS LAST, `dn`.`bought_city` ASC NULLS LAST, `dn`.`ss_ticket_number` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q47_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q47_explain.snap new file mode 100644 index 0000000000..514384730d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q47_explain.snap @@ -0,0 +1,58 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q47" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: v2.sum_sales - v2.avg_monthly_sales ASC NULLS LAST, v2.nsum ASC NULLS LAST | +| | Projection: v2.i_category, v2.i_brand, v2.s_store_name, v2.s_company_name, v2.d_year, v2.avg_monthly_sales, v2.sum_sales, v2.psum, v2.nsum | +| | Filter: v2.d_year = Int64(2001) AND v2.avg_monthly_sales > Int64(0) AND CASE WHEN v2.avg_monthly_sales > Int64(0) THEN abs(v2.sum_sales - v2.avg_monthly_sales) / v2.avg_monthly_sales ELSE NULL END > Float64(0.1) | +| | SubqueryAlias: v2 | +| | Projection: v1.i_category, v1.i_brand, v1.s_store_name, v1.s_company_name, v1.d_year, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum | +| | Inner Join: Filter: v1.i_category = v1_lead.i_category AND v1.i_brand = v1_lead.i_brand AND v1.s_store_name = v1_lead.s_store_name AND v1.s_company_name = v1_lead.s_company_name AND v1.rn = v1_lead.rn - Int64(1) | +| | Inner Join: Filter: v1.i_category = v1_lag.i_category AND v1.i_brand = v1_lag.i_brand AND v1.s_store_name = v1_lag.s_store_name AND v1.s_company_name = v1_lag.s_company_name AND v1.rn = v1_lag.rn + Int64(1) | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2001) - Int64(1) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2001) + Int64(1) AND date_dim.d_moy = Int64(1)] | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| | SubqueryAlias: v1_lag | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2001) - Int64(1) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2001) + Int64(1) AND date_dim.d_moy = Int64(1)] | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| | SubqueryAlias: v1_lead | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2001) OR date_dim.d_year = Int64(2001) - Int64(1) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2001) + Int64(1) AND date_dim.d_moy = Int64(1)] | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT v2.i_category, v2.i_brand, v2.s_store_name, v2.s_company_name, v2.d_year, v2.avg_monthly_sales, v2.sum_sales, v2.psum, v2.nsum FROM (SELECT v1.i_category, v1.i_brand, v1.s_store_name, v1.s_company_name, v1.d_year, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum FROM (SELECT item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) OVER (PARTITION BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS avg_monthly_sales, rank() OVER (PARTITION BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name ORDER BY date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rn FROM item JOIN store_sales ON (store_sales.ss_item_sk = item.i_item_sk) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (((date_dim.d_year = 2001) OR ((date_dim.d_year = (2001 - 1)) AND (date_dim.d_moy = 12))) OR ((date_dim.d_year = (2001 + 1)) AND (date_dim.d_moy = 1)))) JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) GROUP BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy) AS v1 JOIN (SELECT item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() OVER (PARTITION BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name ORDER BY date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rn FROM item JOIN store_sales ON (store_sales.ss_item_sk = item.i_item_sk) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (((date_dim.d_year = 2001) OR ((date_dim.d_year = (2001 - 1)) AND (date_dim.d_moy = 12))) OR ((date_dim.d_year = (2001 + 1)) AND (date_dim.d_moy = 1)))) JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) GROUP BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy) AS v1_lag ON (((((v1.i_category = v1_lag.i_category) AND (v1.i_brand = v1_lag.i_brand)) AND (v1.s_store_name = v1_lag.s_store_name)) AND (v1.s_company_name = v1_lag.s_company_name)) AND (v1.rn = (v1_lag.rn + 1))) JOIN (SELECT item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() OVER (PARTITION BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name ORDER BY date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rn FROM item JOIN store_sales ON (store_sales.ss_item_sk = item.i_item_sk) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (((date_dim.d_year = 2001) OR ((date_dim.d_year = (2001 - 1)) AND (date_dim.d_moy = 12))) OR ((date_dim.d_year = (2001 + 1)) AND (date_dim.d_moy = 1)))) JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) GROUP BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy) AS v1_lead ON (((((v1.i_category = v1_lead.i_category) AND (v1.i_brand = v1_lead.i_brand)) AND (v1.s_store_name = v1_lead.s_store_name)) AND (v1.s_company_name = v1_lead.s_company_name)) AND (v1.rn = (v1_lead.rn - 1)))) AS v2 WHERE (((v2.d_year = 2001) AND (v2.avg_monthly_sales > 0)) AND (CASE WHEN (v2.avg_monthly_sales > 0) THEN (abs((v2.sum_sales - v2.avg_monthly_sales)) / v2.avg_monthly_sales) ELSE NULL END > 0.1)) ORDER BY (v2.sum_sales - v2.avg_monthly_sales) ASC NULLS LAST, v2.nsum ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `v2`.`i_category`, `v2`.`i_brand`, `v2`.`s_store_name`, `v2`.`s_company_name`, `v2`.`d_year`, `v2`.`avg_monthly_sales`, `v2`.`sum_sales`, `v2`.`psum`, `v2`.`nsum` FROM (SELECT `v1`.`i_category`, `v1`.`i_brand`, `v1`.`s_store_name`, `v1`.`s_company_name`, `v1`.`d_year`, `v1`.`avg_monthly_sales`, `v1`.`sum_sales`, `v1_lag`.`sum_sales` AS `psum`, `v1_lead`.`sum_sales` AS `nsum` FROM (SELECT `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, `date_dim`.`d_year`, sum(`store_sales`.`ss_sales_price`) AS `sum_sales`, avg(sum(`store_sales`.`ss_sales_price`)) OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, `date_dim`.`d_year` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `avg_monthly_sales`, rank() OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name` ORDER BY `date_dim`.`d_year` ASC NULLS LAST, `date_dim`.`d_moy` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rn` FROM `item` JOIN `store_sales` ON (`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (((`date_dim`.`d_year` = 2001) OR ((`date_dim`.`d_year` = (2001 - 1)) AND (`date_dim`.`d_moy` = 12))) OR ((`date_dim`.`d_year` = (2001 + 1)) AND (`date_dim`.`d_moy` = 1)))) JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) GROUP BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, `date_dim`.`d_year`, `date_dim`.`d_moy`) AS `v1` JOIN (SELECT `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, sum(`store_sales`.`ss_sales_price`) AS `sum_sales`, rank() OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name` ORDER BY `date_dim`.`d_year` ASC NULLS LAST, `date_dim`.`d_moy` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rn` FROM `item` JOIN `store_sales` ON (`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (((`date_dim`.`d_year` = 2001) OR ((`date_dim`.`d_year` = (2001 - 1)) AND (`date_dim`.`d_moy` = 12))) OR ((`date_dim`.`d_year` = (2001 + 1)) AND (`date_dim`.`d_moy` = 1)))) JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) GROUP BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, `date_dim`.`d_year`, `date_dim`.`d_moy`) AS `v1_lag` ON (((((`v1`.`i_category` = `v1_lag`.`i_category`) AND (`v1`.`i_brand` = `v1_lag`.`i_brand`)) AND (`v1`.`s_store_name` = `v1_lag`.`s_store_name`)) AND (`v1`.`s_company_name` = `v1_lag`.`s_company_name`)) AND (`v1`.`rn` = (`v1_lag`.`rn` + 1))) JOIN (SELECT `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, sum(`store_sales`.`ss_sales_price`) AS `sum_sales`, rank() OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name` ORDER BY `date_dim`.`d_year` ASC NULLS LAST, `date_dim`.`d_moy` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rn` FROM `item` JOIN `store_sales` ON (`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (((`date_dim`.`d_year` = 2001) OR ((`date_dim`.`d_year` = (2001 - 1)) AND (`date_dim`.`d_moy` = 12))) OR ((`date_dim`.`d_year` = (2001 + 1)) AND (`date_dim`.`d_moy` = 1)))) JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) GROUP BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, `date_dim`.`d_year`, `date_dim`.`d_moy`) AS `v1_lead` ON (((((`v1`.`i_category` = `v1_lead`.`i_category`) AND (`v1`.`i_brand` = `v1_lead`.`i_brand`)) AND (`v1`.`s_store_name` = `v1_lead`.`s_store_name`)) AND (`v1`.`s_company_name` = `v1_lead`.`s_company_name`)) AND (`v1`.`rn` = (`v1_lead`.`rn` - 1)))) AS `v2` WHERE (((`v2`.`d_year` = 2001) AND (`v2`.`avg_monthly_sales` > 0)) AND (CASE WHEN (`v2`.`avg_monthly_sales` > 0) THEN (abs((`v2`.`sum_sales` - `v2`.`avg_monthly_sales`)) / `v2`.`avg_monthly_sales`) ELSE NULL END > 0.1)) ORDER BY (`v2`.`sum_sales` - `v2`.`avg_monthly_sales`) ASC NULLS LAST, `v2`.`nsum` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q48_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q48_explain.snap new file mode 100644 index 0000000000..2eabf561a2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q48_explain.snap @@ -0,0 +1,26 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q48" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: sum(store_sales.ss_quantity) | +| | Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_quantity)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk AND customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("IL"), Utf8("KY"), Utf8("OR")]) AND store_sales.ss_net_profit BETWEEN Int64(0) AND Int64(2000) OR store_sales.ss_addr_sk = customer_address.ca_address_sk AND customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("VA"), Utf8("FL"), Utf8("AL")]) AND store_sales.ss_net_profit BETWEEN Int64(150) AND Int64(3000) OR store_sales.ss_addr_sk = customer_address.ca_address_sk AND customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("OK"), Utf8("IA"), Utf8("TX")]) AND store_sales.ss_net_profit BETWEEN Int64(50) AND Int64(25000) | +| | Inner Join: Filter: customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("W") AND customer_demographics.cd_education_status = Utf8("2 yr Degree") AND store_sales.ss_sales_price BETWEEN Float64(100) AND Float64(150) OR customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("S") AND customer_demographics.cd_education_status = Utf8("Advanced Degree") AND store_sales.ss_sales_price BETWEEN Float64(50) AND Float64(100) OR customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk AND customer_demographics.cd_marital_status = Utf8("D") AND customer_demographics.cd_education_status = Utf8("Primary") AND store_sales.ss_sales_price BETWEEN Float64(150) AND Float64(200) | +| | Inner Join: Filter: store.s_store_sk = store_sales.ss_store_sk | +| | Filter: (store_sales.ss_net_profit BETWEEN Int64(0) AND Int64(2000) OR store_sales.ss_net_profit BETWEEN Int64(150) AND Int64(3000) OR store_sales.ss_net_profit BETWEEN Int64(50) AND Int64(25000)) AND (store_sales.ss_sales_price BETWEEN Float64(100) AND Float64(150) OR store_sales.ss_sales_price BETWEEN Float64(50) AND Float64(100) OR store_sales.ss_sales_price BETWEEN Float64(150) AND Float64(200)) | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_cdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_net_profit] | +| | TableScan: store projection=[s_store_sk] | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], full_filters=[customer_demographics.cd_marital_status = Utf8("W") AND customer_demographics.cd_education_status = Utf8("2 yr Degree") OR customer_demographics.cd_marital_status = Utf8("S") AND customer_demographics.cd_education_status = Utf8("Advanced Degree") OR customer_demographics.cd_marital_status = Utf8("D") AND customer_demographics.cd_education_status = Utf8("Primary")] | +| | TableScan: customer_address projection=[ca_address_sk, ca_state, ca_country], full_filters=[customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("IL"), Utf8("KY"), Utf8("OR")]) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("VA"), Utf8("FL"), Utf8("AL")]) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("OK"), Utf8("IA"), Utf8("TX")])] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2001)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT sum(store_sales.ss_quantity) FROM store_sales JOIN store ON ((store.s_store_sk = store_sales.ss_store_sk) AND ((((store_sales.ss_net_profit BETWEEN 0 AND 2000) OR (store_sales.ss_net_profit BETWEEN 150 AND 3000)) OR (store_sales.ss_net_profit BETWEEN 50 AND 25000)) AND (((store_sales.ss_sales_price BETWEEN 100.0 AND 150.0) OR (store_sales.ss_sales_price BETWEEN 50.0 AND 100.0)) OR (store_sales.ss_sales_price BETWEEN 150.0 AND 200.0)))) JOIN customer_demographics ON (((((((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk) AND (customer_demographics.cd_marital_status = 'W')) AND (customer_demographics.cd_education_status = '2 yr Degree')) AND (store_sales.ss_sales_price BETWEEN 100.0 AND 150.0)) OR ((((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk) AND (customer_demographics.cd_marital_status = 'S')) AND (customer_demographics.cd_education_status = 'Advanced Degree')) AND (store_sales.ss_sales_price BETWEEN 50.0 AND 100.0))) OR ((((customer_demographics.cd_demo_sk = store_sales.ss_cdemo_sk) AND (customer_demographics.cd_marital_status = 'D')) AND (customer_demographics.cd_education_status = 'Primary')) AND (store_sales.ss_sales_price BETWEEN 150.0 AND 200.0))) AND ((((customer_demographics.cd_marital_status = 'W') AND (customer_demographics.cd_education_status = '2 yr Degree')) OR ((customer_demographics.cd_marital_status = 'S') AND (customer_demographics.cd_education_status = 'Advanced Degree'))) OR ((customer_demographics.cd_marital_status = 'D') AND (customer_demographics.cd_education_status = 'Primary')))) JOIN customer_address ON (((((((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_country = 'United States')) AND customer_address.ca_state IN ('IL', 'KY', 'OR')) AND (store_sales.ss_net_profit BETWEEN 0 AND 2000)) OR ((((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_country = 'United States')) AND customer_address.ca_state IN ('VA', 'FL', 'AL')) AND (store_sales.ss_net_profit BETWEEN 150 AND 3000))) OR ((((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_country = 'United States')) AND customer_address.ca_state IN ('OK', 'IA', 'TX')) AND (store_sales.ss_net_profit BETWEEN 50 AND 25000))) AND ((((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('IL', 'KY', 'OR')) OR ((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('VA', 'FL', 'AL'))) OR ((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('OK', 'IA', 'TX')))) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2001)) rewritten_sql=SELECT sum(`store_sales`.`ss_quantity`) FROM `store_sales` JOIN `store` ON ((`store`.`s_store_sk` = `store_sales`.`ss_store_sk`) AND ((((`store_sales`.`ss_net_profit` BETWEEN 0 AND 2000) OR (`store_sales`.`ss_net_profit` BETWEEN 150 AND 3000)) OR (`store_sales`.`ss_net_profit` BETWEEN 50 AND 25000)) AND (((`store_sales`.`ss_sales_price` BETWEEN 100.0 AND 150.0) OR (`store_sales`.`ss_sales_price` BETWEEN 50.0 AND 100.0)) OR (`store_sales`.`ss_sales_price` BETWEEN 150.0 AND 200.0)))) JOIN `customer_demographics` ON (((((((`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`) AND (`customer_demographics`.`cd_marital_status` = 'W')) AND (`customer_demographics`.`cd_education_status` = '2 yr Degree')) AND (`store_sales`.`ss_sales_price` BETWEEN 100.0 AND 150.0)) OR ((((`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`) AND (`customer_demographics`.`cd_marital_status` = 'S')) AND (`customer_demographics`.`cd_education_status` = 'Advanced Degree')) AND (`store_sales`.`ss_sales_price` BETWEEN 50.0 AND 100.0))) OR ((((`customer_demographics`.`cd_demo_sk` = `store_sales`.`ss_cdemo_sk`) AND (`customer_demographics`.`cd_marital_status` = 'D')) AND (`customer_demographics`.`cd_education_status` = 'Primary')) AND (`store_sales`.`ss_sales_price` BETWEEN 150.0 AND 200.0))) AND ((((`customer_demographics`.`cd_marital_status` = 'W') AND (`customer_demographics`.`cd_education_status` = '2 yr Degree')) OR ((`customer_demographics`.`cd_marital_status` = 'S') AND (`customer_demographics`.`cd_education_status` = 'Advanced Degree'))) OR ((`customer_demographics`.`cd_marital_status` = 'D') AND (`customer_demographics`.`cd_education_status` = 'Primary')))) JOIN `customer_address` ON (((((((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_country` = 'United States')) AND `customer_address`.`ca_state` IN ('IL', 'KY', 'OR')) AND (`store_sales`.`ss_net_profit` BETWEEN 0 AND 2000)) OR ((((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_country` = 'United States')) AND `customer_address`.`ca_state` IN ('VA', 'FL', 'AL')) AND (`store_sales`.`ss_net_profit` BETWEEN 150 AND 3000))) OR ((((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_country` = 'United States')) AND `customer_address`.`ca_state` IN ('OK', 'IA', 'TX')) AND (`store_sales`.`ss_net_profit` BETWEEN 50 AND 25000))) AND ((((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('IL', 'KY', 'OR')) OR ((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('VA', 'FL', 'AL'))) OR ((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('OK', 'IA', 'TX')))) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2001)) | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q49_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q49_explain.snap new file mode 100644 index 0000000000..ff7f07e8df --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q49_explain.snap @@ -0,0 +1,75 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q49" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: channel ASC NULLS LAST, web.return_rank ASC NULLS LAST, web.currency_rank ASC NULLS LAST, web.item ASC NULLS LAST | +| | Projection: channel, web.item, web.return_ratio, web.return_rank, web.currency_rank | +| | Distinct: | +| | Union | +| | Distinct: | +| | Union | +| | Projection: Utf8("web") AS channel, web.item, web.return_ratio, web.return_rank, web.currency_rank | +| | Filter: web.return_rank <= Int64(10) OR web.currency_rank <= Int64(10) | +| | SubqueryAlias: web | +| | Projection: in_web.item, in_web.return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: in_web | +| | Projection: ws.ws_item_sk AS item, CAST(sum(coalesce(wr.wr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(wr.wr_return_amt,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio | +| | Aggregate: groupBy=[[ws.ws_item_sk]], aggr=[[sum(coalesce(wr.wr_return_quantity, Int64(0))), sum(coalesce(ws.ws_quantity, Int64(0))), sum(coalesce(wr.wr_return_amt, Int64(0))), sum(coalesce(ws.ws_net_paid, Int64(0)))]] | +| | Inner Join: Filter: ws.ws_sold_date_sk = date_dim.d_date_sk | +| | Filter: wr.wr_return_amt > Int64(10000) | +| | Left Join: Filter: ws.ws_order_number = wr.wr_order_number AND ws.ws_item_sk = wr.wr_item_sk | +| | Filter: ws.ws_net_profit > Int64(1) AND ws.ws_net_paid > Int64(0) AND ws.ws_quantity > Int64(0) | +| | SubqueryAlias: ws | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_net_paid, ws_net_profit] | +| | SubqueryAlias: wr | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2000), date_dim.d_moy = Int64(12)] | +| | Projection: Utf8("catalog") AS channel, catalog.item, catalog.return_ratio, catalog.return_rank, catalog.currency_rank | +| | Filter: catalog.return_rank <= Int64(10) OR catalog.currency_rank <= Int64(10) | +| | SubqueryAlias: catalog | +| | Projection: in_cat.item, in_cat.return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: in_cat | +| | Projection: cs.cs_item_sk AS item, CAST(sum(coalesce(cr.cr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(cr.cr_return_amount,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio | +| | Aggregate: groupBy=[[cs.cs_item_sk]], aggr=[[sum(coalesce(cr.cr_return_quantity, Int64(0))), sum(coalesce(cs.cs_quantity, Int64(0))), sum(coalesce(cr.cr_return_amount, Int64(0))), sum(coalesce(cs.cs_net_paid, Int64(0)))]] | +| | Inner Join: Filter: cs.cs_sold_date_sk = date_dim.d_date_sk | +| | Filter: cr.cr_return_amount > Int64(10000) | +| | Left Join: Filter: cs.cs_order_number = cr.cr_order_number AND cs.cs_item_sk = cr.cr_item_sk | +| | Filter: cs.cs_net_profit > Int64(1) AND cs.cs_net_paid > Int64(0) AND cs.cs_quantity > Int64(0) | +| | SubqueryAlias: cs | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_net_paid, cs_net_profit] | +| | SubqueryAlias: cr | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2000), date_dim.d_moy = Int64(12)] | +| | Projection: Utf8("store") AS channel, store.item, store.return_ratio, store.return_rank, store.currency_rank | +| | Filter: store.return_rank <= Int64(10) OR store.currency_rank <= Int64(10) | +| | SubqueryAlias: store | +| | Projection: in_store.item, in_store.return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: in_store | +| | Projection: sts.ss_item_sk AS item, CAST(sum(coalesce(sr.sr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(sr.sr_return_amt,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio | +| | Aggregate: groupBy=[[sts.ss_item_sk]], aggr=[[sum(coalesce(sr.sr_return_quantity, Int64(0))), sum(coalesce(sts.ss_quantity, Int64(0))), sum(coalesce(sr.sr_return_amt, Int64(0))), sum(coalesce(sts.ss_net_paid, Int64(0)))]] | +| | Inner Join: Filter: sts.ss_sold_date_sk = date_dim.d_date_sk | +| | Filter: sr.sr_return_amt > Int64(10000) | +| | Left Join: Filter: sts.ss_ticket_number = sr.sr_ticket_number AND sts.ss_item_sk = sr.sr_item_sk | +| | Filter: sts.ss_net_profit > Int64(1) AND sts.ss_net_paid > Int64(0) AND sts.ss_quantity > Int64(0) | +| | SubqueryAlias: sts | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_net_paid, ss_net_profit] | +| | SubqueryAlias: sr | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2000), date_dim.d_moy = Int64(12)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT "channel", item, return_ratio, return_rank, currency_rank FROM (SELECT 'web' AS "channel", web.item, web.return_ratio, web.return_rank, web.currency_rank FROM (SELECT in_web.item, in_web.return_ratio, rank() OVER (ORDER BY in_web.return_ratio ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS return_rank, rank() OVER (ORDER BY in_web.currency_ratio ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS currency_rank FROM (SELECT ws.ws_item_sk AS item, (CAST(sum(coalesce(wr.wr_return_quantity, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(ws.ws_quantity, 0)) AS DECIMAL(15,4))) AS return_ratio, (CAST(sum(coalesce(wr.wr_return_amt, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(ws.ws_net_paid, 0)) AS DECIMAL(15,4))) AS currency_ratio FROM web_sales AS ws LEFT JOIN web_returns AS wr ON (((ws.ws_order_number = wr.wr_order_number) AND (ws.ws_item_sk = wr.wr_item_sk)) AND (((ws.ws_net_profit > 1) AND (ws.ws_net_paid > 0)) AND (ws.ws_quantity > 0))) JOIN date_dim ON ((ws.ws_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2000) AND (date_dim.d_moy = 12))) WHERE (wr.wr_return_amt > 10000) GROUP BY ws.ws_item_sk) AS in_web) AS web WHERE ((web.return_rank <= 10) OR (web.currency_rank <= 10)) UNION SELECT 'catalog' AS "channel", "catalog".item, "catalog".return_ratio, "catalog".return_rank, "catalog".currency_rank FROM (SELECT in_cat.item, in_cat.return_ratio, rank() OVER (ORDER BY in_cat.return_ratio ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS return_rank, rank() OVER (ORDER BY in_cat.currency_ratio ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS currency_rank FROM (SELECT cs.cs_item_sk AS item, (CAST(sum(coalesce(cr.cr_return_quantity, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(cs.cs_quantity, 0)) AS DECIMAL(15,4))) AS return_ratio, (CAST(sum(coalesce(cr.cr_return_amount, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(cs.cs_net_paid, 0)) AS DECIMAL(15,4))) AS currency_ratio FROM catalog_sales AS cs LEFT JOIN catalog_returns AS cr ON (((cs.cs_order_number = cr.cr_order_number) AND (cs.cs_item_sk = cr.cr_item_sk)) AND (((cs.cs_net_profit > 1) AND (cs.cs_net_paid > 0)) AND (cs.cs_quantity > 0))) JOIN date_dim ON ((cs.cs_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2000) AND (date_dim.d_moy = 12))) WHERE (cr.cr_return_amount > 10000) GROUP BY cs.cs_item_sk) AS in_cat) AS "catalog" WHERE (("catalog".return_rank <= 10) OR ("catalog".currency_rank <= 10)) UNION SELECT 'store' AS "channel", store.item, store.return_ratio, store.return_rank, store.currency_rank FROM (SELECT in_store.item, in_store.return_ratio, rank() OVER (ORDER BY in_store.return_ratio ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS return_rank, rank() OVER (ORDER BY in_store.currency_ratio ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS currency_rank FROM (SELECT sts.ss_item_sk AS item, (CAST(sum(coalesce(sr.sr_return_quantity, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(sts.ss_quantity, 0)) AS DECIMAL(15,4))) AS return_ratio, (CAST(sum(coalesce(sr.sr_return_amt, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(sts.ss_net_paid, 0)) AS DECIMAL(15,4))) AS currency_ratio FROM store_sales AS sts LEFT JOIN store_returns AS sr ON (((sts.ss_ticket_number = sr.sr_ticket_number) AND (sts.ss_item_sk = sr.sr_item_sk)) AND (((sts.ss_net_profit > 1) AND (sts.ss_net_paid > 0)) AND (sts.ss_quantity > 0))) JOIN date_dim ON ((sts.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2000) AND (date_dim.d_moy = 12))) WHERE (sr.sr_return_amt > 10000) GROUP BY sts.ss_item_sk) AS in_store) AS store WHERE ((store.return_rank <= 10) OR (store.currency_rank <= 10))) ORDER BY "channel" ASC NULLS LAST, return_rank ASC NULLS LAST, currency_rank ASC NULLS LAST, item ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `channel`, `item`, `return_ratio`, `return_rank`, `currency_rank` FROM (SELECT 'web' AS `channel`, `web`.`item`, `web`.`return_ratio`, `web`.`return_rank`, `web`.`currency_rank` FROM (SELECT `in_web`.`item`, `in_web`.`return_ratio`, rank() OVER (ORDER BY `in_web`.`return_ratio` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `return_rank`, rank() OVER (ORDER BY `in_web`.`currency_ratio` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `currency_rank` FROM (SELECT `ws`.`ws_item_sk` AS `item`, (CAST(sum(coalesce(`wr`.`wr_return_quantity`, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(`ws`.`ws_quantity`, 0)) AS DECIMAL(15,4))) AS `return_ratio`, (CAST(sum(coalesce(`wr`.`wr_return_amt`, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(`ws`.`ws_net_paid`, 0)) AS DECIMAL(15,4))) AS `currency_ratio` FROM `web_sales` AS `ws` LEFT JOIN `web_returns` AS `wr` ON (((`ws`.`ws_order_number` = `wr`.`wr_order_number`) AND (`ws`.`ws_item_sk` = `wr`.`wr_item_sk`)) AND (((`ws`.`ws_net_profit` > 1) AND (`ws`.`ws_net_paid` > 0)) AND (`ws`.`ws_quantity` > 0))) JOIN `date_dim` ON ((`ws`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2000) AND (`date_dim`.`d_moy` = 12))) WHERE (`wr`.`wr_return_amt` > 10000) GROUP BY `ws`.`ws_item_sk`) AS `in_web`) AS `web` WHERE ((`web`.`return_rank` <= 10) OR (`web`.`currency_rank` <= 10)) UNION SELECT 'catalog' AS `channel`, `catalog`.`item`, `catalog`.`return_ratio`, `catalog`.`return_rank`, `catalog`.`currency_rank` FROM (SELECT `in_cat`.`item`, `in_cat`.`return_ratio`, rank() OVER (ORDER BY `in_cat`.`return_ratio` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `return_rank`, rank() OVER (ORDER BY `in_cat`.`currency_ratio` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `currency_rank` FROM (SELECT `cs`.`cs_item_sk` AS `item`, (CAST(sum(coalesce(`cr`.`cr_return_quantity`, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(`cs`.`cs_quantity`, 0)) AS DECIMAL(15,4))) AS `return_ratio`, (CAST(sum(coalesce(`cr`.`cr_return_amount`, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(`cs`.`cs_net_paid`, 0)) AS DECIMAL(15,4))) AS `currency_ratio` FROM `catalog_sales` AS `cs` LEFT JOIN `catalog_returns` AS `cr` ON (((`cs`.`cs_order_number` = `cr`.`cr_order_number`) AND (`cs`.`cs_item_sk` = `cr`.`cr_item_sk`)) AND (((`cs`.`cs_net_profit` > 1) AND (`cs`.`cs_net_paid` > 0)) AND (`cs`.`cs_quantity` > 0))) JOIN `date_dim` ON ((`cs`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2000) AND (`date_dim`.`d_moy` = 12))) WHERE (`cr`.`cr_return_amount` > 10000) GROUP BY `cs`.`cs_item_sk`) AS `in_cat`) AS `catalog` WHERE ((`catalog`.`return_rank` <= 10) OR (`catalog`.`currency_rank` <= 10)) UNION SELECT 'store' AS `channel`, `store`.`item`, `store`.`return_ratio`, `store`.`return_rank`, `store`.`currency_rank` FROM (SELECT `in_store`.`item`, `in_store`.`return_ratio`, rank() OVER (ORDER BY `in_store`.`return_ratio` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `return_rank`, rank() OVER (ORDER BY `in_store`.`currency_ratio` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `currency_rank` FROM (SELECT `sts`.`ss_item_sk` AS `item`, (CAST(sum(coalesce(`sr`.`sr_return_quantity`, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(`sts`.`ss_quantity`, 0)) AS DECIMAL(15,4))) AS `return_ratio`, (CAST(sum(coalesce(`sr`.`sr_return_amt`, 0)) AS DECIMAL(15,4)) / CAST(sum(coalesce(`sts`.`ss_net_paid`, 0)) AS DECIMAL(15,4))) AS `currency_ratio` FROM `store_sales` AS `sts` LEFT JOIN `store_returns` AS `sr` ON (((`sts`.`ss_ticket_number` = `sr`.`sr_ticket_number`) AND (`sts`.`ss_item_sk` = `sr`.`sr_item_sk`)) AND (((`sts`.`ss_net_profit` > 1) AND (`sts`.`ss_net_paid` > 0)) AND (`sts`.`ss_quantity` > 0))) JOIN `date_dim` ON ((`sts`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2000) AND (`date_dim`.`d_moy` = 12))) WHERE (`sr`.`sr_return_amt` > 10000) GROUP BY `sts`.`ss_item_sk`) AS `in_store`) AS `store` WHERE ((`store`.`return_rank` <= 10) OR (`store`.`currency_rank` <= 10))) ORDER BY `channel` ASC NULLS LAST, `return_rank` ASC NULLS LAST, `currency_rank` ASC NULLS LAST, `item` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q4_explain.snap new file mode 100644 index 0000000000..9ded6b5708 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q4_explain.snap @@ -0,0 +1,178 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q4" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: t_s_secyear.customer_id ASC NULLS LAST, t_s_secyear.customer_first_name ASC NULLS LAST, t_s_secyear.customer_last_name ASC NULLS LAST, t_s_secyear.customer_email_address ASC NULLS LAST | +| | Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address | +| | Inner Join: Filter: t_s_firstyear.customer_id = t_w_secyear.customer_id AND CASE WHEN t_c_firstyear.year_total > Int64(0) THEN t_c_secyear.year_total / t_c_firstyear.year_total ELSE NULL END > CASE WHEN t_w_firstyear.year_total > Int64(0) THEN t_w_secyear.year_total / t_w_firstyear.year_total ELSE NULL END | +| | Inner Join: Filter: t_s_firstyear.customer_id = t_w_firstyear.customer_id | +| | Inner Join: Filter: t_s_firstyear.customer_id = t_c_secyear.customer_id AND CASE WHEN t_c_firstyear.year_total > Int64(0) THEN t_c_secyear.year_total / t_c_firstyear.year_total ELSE NULL END > CASE WHEN t_s_firstyear.year_total > Int64(0) THEN t_s_secyear.year_total / t_s_firstyear.year_total ELSE NULL END | +| | Inner Join: Filter: t_s_firstyear.customer_id = t_c_firstyear.customer_id | +| | Inner Join: Filter: t_s_secyear.customer_id = t_s_firstyear.customer_id | +| | Filter: t_s_firstyear.sale_type = Utf8("s") AND t_s_firstyear.dyear = Int64(2001) AND t_s_firstyear.year_total > Int64(0) | +| | SubqueryAlias: t_s_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total, Utf8("c") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_s_secyear.sale_type = Utf8("s") AND t_s_secyear.dyear = Int64(2001) + Int64(1) | +| | SubqueryAlias: t_s_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total, Utf8("c") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_c_firstyear.sale_type = Utf8("c") AND t_c_firstyear.dyear = Int64(2001) AND t_c_firstyear.year_total > Int64(0) | +| | SubqueryAlias: t_c_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total, Utf8("c") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_c_secyear.sale_type = Utf8("c") AND t_c_secyear.dyear = Int64(2001) + Int64(1) | +| | SubqueryAlias: t_c_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total, Utf8("c") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_w_firstyear.sale_type = Utf8("w") AND t_w_firstyear.dyear = Int64(2001) AND t_w_firstyear.year_total > Int64(0) | +| | SubqueryAlias: t_w_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total, Utf8("c") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Filter: t_w_secyear.sale_type = Utf8("w") AND t_w_secyear.dyear = Int64(2001) + Int64(1) | +| | SubqueryAlias: t_w_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total, Utf8("s") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = store_sales.ss_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total, Utf8("c") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | Projection: customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total, Utf8("w") AS sale_type | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Int64(2))]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address] | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address FROM (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / 2)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / 2)) AS year_total, 'c' AS sale_type FROM customer JOIN catalog_sales ON (customer.c_customer_sk = catalog_sales.cs_bill_customer_sk) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / 2)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_s_firstyear JOIN (SELECT customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / 2)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / 2)) AS year_total, 'c' AS sale_type FROM customer JOIN catalog_sales ON (customer.c_customer_sk = catalog_sales.cs_bill_customer_sk) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, date_dim.d_year AS dyear, sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / 2)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_s_secyear ON (t_s_secyear.customer_id = t_s_firstyear.customer_id) JOIN (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / 2)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / 2)) AS year_total, 'c' AS sale_type FROM customer JOIN catalog_sales ON (customer.c_customer_sk = catalog_sales.cs_bill_customer_sk) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / 2)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_c_firstyear ON (t_s_firstyear.customer_id = t_c_firstyear.customer_id) JOIN (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / 2)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / 2)) AS year_total, 'c' AS sale_type FROM customer JOIN catalog_sales ON (customer.c_customer_sk = catalog_sales.cs_bill_customer_sk) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / 2)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_c_secyear ON ((t_s_firstyear.customer_id = t_c_secyear.customer_id) AND (CASE WHEN (t_c_firstyear.year_total > 0) THEN (t_c_secyear.year_total / t_c_firstyear.year_total) ELSE NULL END > CASE WHEN (t_s_firstyear.year_total > 0) THEN (t_s_secyear.year_total / t_s_firstyear.year_total) ELSE NULL END)) JOIN (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / 2)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / 2)) AS year_total, 'c' AS sale_type FROM customer JOIN catalog_sales ON (customer.c_customer_sk = catalog_sales.cs_bill_customer_sk) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / 2)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_w_firstyear ON (t_s_firstyear.customer_id = t_w_firstyear.customer_id) JOIN (SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost) - store_sales.ss_ext_discount_amt) + store_sales.ss_ext_sales_price) / 2)) AS year_total, 's' AS sale_type FROM customer JOIN store_sales ON (customer.c_customer_sk = store_sales.ss_customer_sk) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost) - catalog_sales.cs_ext_discount_amt) + catalog_sales.cs_ext_sales_price) / 2)) AS year_total, 'c' AS sale_type FROM customer JOIN catalog_sales ON (customer.c_customer_sk = catalog_sales.cs_bill_customer_sk) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year UNION ALL SELECT customer.c_customer_id AS customer_id, date_dim.d_year AS dyear, sum(((((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost) - web_sales.ws_ext_discount_amt) + web_sales.ws_ext_sales_price) / 2)) AS year_total, 'w' AS sale_type FROM customer JOIN web_sales ON (customer.c_customer_sk = web_sales.ws_bill_customer_sk) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) GROUP BY customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year) AS t_w_secyear ON ((t_s_firstyear.customer_id = t_w_secyear.customer_id) AND (CASE WHEN (t_c_firstyear.year_total > 0) THEN (t_c_secyear.year_total / t_c_firstyear.year_total) ELSE NULL END > CASE WHEN (t_w_firstyear.year_total > 0) THEN (t_w_secyear.year_total / t_w_firstyear.year_total) ELSE NULL END)) WHERE (((t_s_firstyear.sale_type = 's') AND (t_s_firstyear.dyear = 2001)) AND (t_s_firstyear.year_total > 0)) AND ((t_s_secyear.sale_type = 's') AND (t_s_secyear.dyear = (2001 + 1))) AND ((t_s_secyear.sale_type = 's') AND (t_s_secyear.dyear = (2001 + 1))) AND (((t_c_firstyear.sale_type = 'c') AND (t_c_firstyear.dyear = 2001)) AND (t_c_firstyear.year_total > 0)) AND (((t_c_firstyear.sale_type = 'c') AND (t_c_firstyear.dyear = 2001)) AND (t_c_firstyear.year_total > 0)) AND ((t_c_secyear.sale_type = 'c') AND (t_c_secyear.dyear = (2001 + 1))) AND ((t_c_secyear.sale_type = 'c') AND (t_c_secyear.dyear = (2001 + 1))) AND (((t_w_firstyear.sale_type = 'w') AND (t_w_firstyear.dyear = 2001)) AND (t_w_firstyear.year_total > 0)) AND (((t_w_firstyear.sale_type = 'w') AND (t_w_firstyear.dyear = 2001)) AND (t_w_firstyear.year_total > 0)) AND ((t_w_secyear.sale_type = 'w') AND (t_w_secyear.dyear = (2001 + 1))) AND ((t_w_secyear.sale_type = 'w') AND (t_w_secyear.dyear = (2001 + 1))) ORDER BY t_s_secyear.customer_id ASC NULLS LAST, t_s_secyear.customer_first_name ASC NULLS LAST, t_s_secyear.customer_last_name ASC NULLS LAST, t_s_secyear.customer_email_address ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `t_s_secyear`.`customer_id`, `t_s_secyear`.`customer_first_name`, `t_s_secyear`.`customer_last_name`, `t_s_secyear`.`customer_email_address` FROM (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_wholesale_cost`) - `store_sales`.`ss_ext_discount_amt`) + `store_sales`.`ss_ext_sales_price`) / 2)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`catalog_sales`.`cs_ext_list_price` - `catalog_sales`.`cs_ext_wholesale_cost`) - `catalog_sales`.`cs_ext_discount_amt`) + `catalog_sales`.`cs_ext_sales_price`) / 2)) AS `year_total`, 'c' AS `sale_type` FROM `customer` JOIN `catalog_sales` ON (`customer`.`c_customer_sk` = `catalog_sales`.`cs_bill_customer_sk`) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_wholesale_cost`) - `web_sales`.`ws_ext_discount_amt`) + `web_sales`.`ws_ext_sales_price`) / 2)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_s_firstyear` JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `customer`.`c_first_name` AS `customer_first_name`, `customer`.`c_last_name` AS `customer_last_name`, `customer`.`c_email_address` AS `customer_email_address`, `date_dim`.`d_year` AS `dyear`, sum(((((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_wholesale_cost`) - `store_sales`.`ss_ext_discount_amt`) + `store_sales`.`ss_ext_sales_price`) / 2)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `customer`.`c_first_name` AS `customer_first_name`, `customer`.`c_last_name` AS `customer_last_name`, `customer`.`c_email_address` AS `customer_email_address`, `date_dim`.`d_year` AS `dyear`, sum(((((`catalog_sales`.`cs_ext_list_price` - `catalog_sales`.`cs_ext_wholesale_cost`) - `catalog_sales`.`cs_ext_discount_amt`) + `catalog_sales`.`cs_ext_sales_price`) / 2)) AS `year_total`, 'c' AS `sale_type` FROM `customer` JOIN `catalog_sales` ON (`customer`.`c_customer_sk` = `catalog_sales`.`cs_bill_customer_sk`) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `customer`.`c_first_name` AS `customer_first_name`, `customer`.`c_last_name` AS `customer_last_name`, `customer`.`c_email_address` AS `customer_email_address`, `date_dim`.`d_year` AS `dyear`, sum(((((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_wholesale_cost`) - `web_sales`.`ws_ext_discount_amt`) + `web_sales`.`ws_ext_sales_price`) / 2)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_s_secyear` ON (`t_s_secyear`.`customer_id` = `t_s_firstyear`.`customer_id`) JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_wholesale_cost`) - `store_sales`.`ss_ext_discount_amt`) + `store_sales`.`ss_ext_sales_price`) / 2)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`catalog_sales`.`cs_ext_list_price` - `catalog_sales`.`cs_ext_wholesale_cost`) - `catalog_sales`.`cs_ext_discount_amt`) + `catalog_sales`.`cs_ext_sales_price`) / 2)) AS `year_total`, 'c' AS `sale_type` FROM `customer` JOIN `catalog_sales` ON (`customer`.`c_customer_sk` = `catalog_sales`.`cs_bill_customer_sk`) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_wholesale_cost`) - `web_sales`.`ws_ext_discount_amt`) + `web_sales`.`ws_ext_sales_price`) / 2)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_c_firstyear` ON (`t_s_firstyear`.`customer_id` = `t_c_firstyear`.`customer_id`) JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_wholesale_cost`) - `store_sales`.`ss_ext_discount_amt`) + `store_sales`.`ss_ext_sales_price`) / 2)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`catalog_sales`.`cs_ext_list_price` - `catalog_sales`.`cs_ext_wholesale_cost`) - `catalog_sales`.`cs_ext_discount_amt`) + `catalog_sales`.`cs_ext_sales_price`) / 2)) AS `year_total`, 'c' AS `sale_type` FROM `customer` JOIN `catalog_sales` ON (`customer`.`c_customer_sk` = `catalog_sales`.`cs_bill_customer_sk`) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_wholesale_cost`) - `web_sales`.`ws_ext_discount_amt`) + `web_sales`.`ws_ext_sales_price`) / 2)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_c_secyear` ON ((`t_s_firstyear`.`customer_id` = `t_c_secyear`.`customer_id`) AND (CASE WHEN (`t_c_firstyear`.`year_total` > 0) THEN (`t_c_secyear`.`year_total` / `t_c_firstyear`.`year_total`) ELSE NULL END > CASE WHEN (`t_s_firstyear`.`year_total` > 0) THEN (`t_s_secyear`.`year_total` / `t_s_firstyear`.`year_total`) ELSE NULL END)) JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_wholesale_cost`) - `store_sales`.`ss_ext_discount_amt`) + `store_sales`.`ss_ext_sales_price`) / 2)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`catalog_sales`.`cs_ext_list_price` - `catalog_sales`.`cs_ext_wholesale_cost`) - `catalog_sales`.`cs_ext_discount_amt`) + `catalog_sales`.`cs_ext_sales_price`) / 2)) AS `year_total`, 'c' AS `sale_type` FROM `customer` JOIN `catalog_sales` ON (`customer`.`c_customer_sk` = `catalog_sales`.`cs_bill_customer_sk`) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_wholesale_cost`) - `web_sales`.`ws_ext_discount_amt`) + `web_sales`.`ws_ext_sales_price`) / 2)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_w_firstyear` ON (`t_s_firstyear`.`customer_id` = `t_w_firstyear`.`customer_id`) JOIN (SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`store_sales`.`ss_ext_list_price` - `store_sales`.`ss_ext_wholesale_cost`) - `store_sales`.`ss_ext_discount_amt`) + `store_sales`.`ss_ext_sales_price`) / 2)) AS `year_total`, 's' AS `sale_type` FROM `customer` JOIN `store_sales` ON (`customer`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`catalog_sales`.`cs_ext_list_price` - `catalog_sales`.`cs_ext_wholesale_cost`) - `catalog_sales`.`cs_ext_discount_amt`) + `catalog_sales`.`cs_ext_sales_price`) / 2)) AS `year_total`, 'c' AS `sale_type` FROM `customer` JOIN `catalog_sales` ON (`customer`.`c_customer_sk` = `catalog_sales`.`cs_bill_customer_sk`) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year` UNION ALL SELECT `customer`.`c_customer_id` AS `customer_id`, `date_dim`.`d_year` AS `dyear`, sum(((((`web_sales`.`ws_ext_list_price` - `web_sales`.`ws_ext_wholesale_cost`) - `web_sales`.`ws_ext_discount_amt`) + `web_sales`.`ws_ext_sales_price`) / 2)) AS `year_total`, 'w' AS `sale_type` FROM `customer` JOIN `web_sales` ON (`customer`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) GROUP BY `customer`.`c_customer_id`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer`.`c_preferred_cust_flag`, `customer`.`c_birth_country`, `customer`.`c_login`, `customer`.`c_email_address`, `date_dim`.`d_year`) AS `t_w_secyear` ON ((`t_s_firstyear`.`customer_id` = `t_w_secyear`.`customer_id`) AND (CASE WHEN (`t_c_firstyear`.`year_total` > 0) THEN (`t_c_secyear`.`year_total` / `t_c_firstyear`.`year_total`) ELSE NULL END > CASE WHEN (`t_w_firstyear`.`year_total` > 0) THEN (`t_w_secyear`.`year_total` / `t_w_firstyear`.`year_total`) ELSE NULL END)) WHERE (((`t_s_firstyear`.`sale_type` = 's') AND (`t_s_firstyear`.`dyear` = 2001)) AND (`t_s_firstyear`.`year_total` > 0)) AND ((`t_s_secyear`.`sale_type` = 's') AND (`t_s_secyear`.`dyear` = (2001 + 1))) AND ((`t_s_secyear`.`sale_type` = 's') AND (`t_s_secyear`.`dyear` = (2001 + 1))) AND (((`t_c_firstyear`.`sale_type` = 'c') AND (`t_c_firstyear`.`dyear` = 2001)) AND (`t_c_firstyear`.`year_total` > 0)) AND (((`t_c_firstyear`.`sale_type` = 'c') AND (`t_c_firstyear`.`dyear` = 2001)) AND (`t_c_firstyear`.`year_total` > 0)) AND ((`t_c_secyear`.`sale_type` = 'c') AND (`t_c_secyear`.`dyear` = (2001 + 1))) AND ((`t_c_secyear`.`sale_type` = 'c') AND (`t_c_secyear`.`dyear` = (2001 + 1))) AND (((`t_w_firstyear`.`sale_type` = 'w') AND (`t_w_firstyear`.`dyear` = 2001)) AND (`t_w_firstyear`.`year_total` > 0)) AND (((`t_w_firstyear`.`sale_type` = 'w') AND (`t_w_firstyear`.`dyear` = 2001)) AND (`t_w_firstyear`.`year_total` > 0)) AND ((`t_w_secyear`.`sale_type` = 'w') AND (`t_w_secyear`.`dyear` = (2001 + 1))) AND ((`t_w_secyear`.`sale_type` = 'w') AND (`t_w_secyear`.`dyear` = (2001 + 1))) ORDER BY `t_s_secyear`.`customer_id` ASC NULLS LAST, `t_s_secyear`.`customer_first_name` ASC NULLS LAST, `t_s_secyear`.`customer_last_name` ASC NULLS LAST, `t_s_secyear`.`customer_email_address` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q50_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q50_explain.snap new file mode 100644 index 0000000000..d94bdaeeb5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q50_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q50" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: store.s_store_name ASC NULLS LAST, store.s_company_id ASC NULLS LAST, store.s_street_number ASC NULLS LAST, store.s_street_name ASC NULLS LAST, store.s_street_type ASC NULLS LAST, store.s_suite_number ASC NULLS LAST, store.s_city ASC NULLS LAST, store.s_county ASC NULLS LAST, store.s_state ASC NULLS LAST, store.s_zip ASC NULLS LAST | +| | Projection: store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days | +| | Aggregate: groupBy=[[store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip]], aggr=[[sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] | +| | Inner Join: Filter: store_returns.sr_returned_date_sk = d2.d_date_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_ticket_number = store_returns.sr_ticket_number AND store_sales.ss_item_sk = store_returns.sr_item_sk AND store_sales.ss_customer_sk = store_returns.sr_customer_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number] | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number] | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_id, s_street_number, s_street_name, s_street_type, s_suite_number, s_city, s_county, s_state, s_zip] | +| | SubqueryAlias: d1 | +| | TableScan: date_dim projection=[d_date_sk] | +| | Filter: d2.d_year = Int64(2002) AND d2.d_moy = Int64(8) | +| | SubqueryAlias: d2 | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip, sum(CASE WHEN ((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) <= 30) THEN 1 ELSE 0 END) AS "30 days", sum(CASE WHEN (((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) > 30) AND ((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) <= 60)) THEN 1 ELSE 0 END) AS "31-60 days", sum(CASE WHEN (((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) > 60) AND ((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) <= 90)) THEN 1 ELSE 0 END) AS "61-90 days", sum(CASE WHEN (((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) > 90) AND ((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) <= 120)) THEN 1 ELSE 0 END) AS "91-120 days", sum(CASE WHEN ((store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk) > 120) THEN 1 ELSE 0 END) AS ">120 days" FROM store_sales JOIN store_returns ON (((store_sales.ss_ticket_number = store_returns.sr_ticket_number) AND (store_sales.ss_item_sk = store_returns.sr_item_sk)) AND (store_sales.ss_customer_sk = store_returns.sr_customer_sk)) JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) JOIN date_dim AS d1 ON (store_sales.ss_sold_date_sk = d1.d_date_sk) JOIN date_dim AS d2 ON ((store_returns.sr_returned_date_sk = d2.d_date_sk) AND ((d2.d_year = 2002) AND (d2.d_moy = 8))) GROUP BY store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip ORDER BY store.s_store_name ASC NULLS LAST, store.s_company_id ASC NULLS LAST, store.s_street_number ASC NULLS LAST, store.s_street_name ASC NULLS LAST, store.s_street_type ASC NULLS LAST, store.s_suite_number ASC NULLS LAST, store.s_city ASC NULLS LAST, store.s_county ASC NULLS LAST, store.s_state ASC NULLS LAST, store.s_zip ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `store`.`s_store_name`, `store`.`s_company_id`, `store`.`s_street_number`, `store`.`s_street_name`, `store`.`s_street_type`, `store`.`s_suite_number`, `store`.`s_city`, `store`.`s_county`, `store`.`s_state`, `store`.`s_zip`, sum(CASE WHEN ((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) <= 30) THEN 1 ELSE 0 END) AS `30 days`, sum(CASE WHEN (((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) > 30) AND ((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) <= 60)) THEN 1 ELSE 0 END) AS `31-60 days`, sum(CASE WHEN (((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) > 60) AND ((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) <= 90)) THEN 1 ELSE 0 END) AS `61-90 days`, sum(CASE WHEN (((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) > 90) AND ((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) <= 120)) THEN 1 ELSE 0 END) AS `91-120 days`, sum(CASE WHEN ((`store_returns`.`sr_returned_date_sk` - `store_sales`.`ss_sold_date_sk`) > 120) THEN 1 ELSE 0 END) AS `>120 days` FROM `store_sales` JOIN `store_returns` ON (((`store_sales`.`ss_ticket_number` = `store_returns`.`sr_ticket_number`) AND (`store_sales`.`ss_item_sk` = `store_returns`.`sr_item_sk`)) AND (`store_sales`.`ss_customer_sk` = `store_returns`.`sr_customer_sk`)) JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) JOIN `date_dim` AS `d1` ON (`store_sales`.`ss_sold_date_sk` = `d1`.`d_date_sk`) JOIN `date_dim` AS `d2` ON ((`store_returns`.`sr_returned_date_sk` = `d2`.`d_date_sk`) AND ((`d2`.`d_year` = 2002) AND (`d2`.`d_moy` = 8))) GROUP BY `store`.`s_store_name`, `store`.`s_company_id`, `store`.`s_street_number`, `store`.`s_street_name`, `store`.`s_street_type`, `store`.`s_suite_number`, `store`.`s_city`, `store`.`s_county`, `store`.`s_state`, `store`.`s_zip` ORDER BY `store`.`s_store_name` ASC NULLS LAST, `store`.`s_company_id` ASC NULLS LAST, `store`.`s_street_number` ASC NULLS LAST, `store`.`s_street_name` ASC NULLS LAST, `store`.`s_street_type` ASC NULLS LAST, `store`.`s_suite_number` ASC NULLS LAST, `store`.`s_city` ASC NULLS LAST, `store`.`s_county` ASC NULLS LAST, `store`.`s_state` ASC NULLS LAST, `store`.`s_zip` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q51_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q51_explain.snap new file mode 100644 index 0000000000..a92d0f9461 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q51_explain.snap @@ -0,0 +1,44 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q51" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: y.item_sk ASC NULLS LAST, y.d_date ASC NULLS LAST | +| | Projection: y.item_sk, y.d_date, y.web_sales, y.store_sales, y.web_cumulative, y.store_cumulative | +| | Filter: y.web_cumulative > y.store_cumulative | +| | SubqueryAlias: y | +| | Projection: x.item_sk, x.d_date, x.web_sales, x.store_sales, max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS web_cumulative, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS store_cumulative | +| | WindowAggr: windowExpr=[[max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: x | +| | Projection: CASE WHEN web.item_sk IS NOT NULL THEN web.item_sk ELSE store.item_sk END AS item_sk, CASE WHEN web.d_date IS NOT NULL THEN web.d_date ELSE store.d_date END AS d_date, web.cume_sales AS web_sales, store.cume_sales AS store_sales | +| | Full Join: Filter: web.item_sk = store.item_sk AND web.d_date = store.d_date | +| | SubqueryAlias: web | +| | SubqueryAlias: web_v1 | +| | Projection: web_sales.ws_item_sk AS item_sk, date_dim.d_date, sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS cume_sales | +| | WindowAggr: windowExpr=[[sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[web_sales.ws_item_sk, date_dim.d_date]], aggr=[[sum(web_sales.ws_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Filter: web_sales.ws_item_sk IS NOT NULL | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_sales_price] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1215) AND Int64(1215) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq] | +| | SubqueryAlias: store | +| | SubqueryAlias: store_v1 | +| | Projection: store_sales.ss_item_sk AS item_sk, date_dim.d_date, sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS cume_sales | +| | WindowAggr: windowExpr=[[sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[store_sales.ss_item_sk, date_dim.d_date]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Filter: store_sales.ss_item_sk IS NOT NULL | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_sales_price] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1215) AND Int64(1215) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_date, d_month_seq] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT y.item_sk, y.d_date, y.web_sales, y.store_sales, y.web_cumulative, y.store_cumulative FROM (SELECT x.item_sk, x.d_date, x.web_sales, x.store_sales, max(x.web_sales) OVER (PARTITION BY x.item_sk ORDER BY x.d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS web_cumulative, max(x.store_sales) OVER (PARTITION BY x.item_sk ORDER BY x.d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS store_cumulative FROM (SELECT CASE WHEN web.item_sk IS NOT NULL THEN web.item_sk ELSE store.item_sk END AS item_sk, CASE WHEN web.d_date IS NOT NULL THEN web.d_date ELSE store.d_date END AS d_date, web.cume_sales AS web_sales, store.cume_sales AS store_sales FROM (SELECT web_sales.ws_item_sk AS item_sk, date_dim.d_date, sum(sum(web_sales.ws_sales_price)) OVER (PARTITION BY web_sales.ws_item_sk ORDER BY date_dim.d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cume_sales FROM web_sales JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND (web_sales.ws_item_sk IS NOT NULL AND (date_dim.d_month_seq BETWEEN 1215 AND (1215 + 11)))) GROUP BY web_sales.ws_item_sk, date_dim.d_date) AS web FULL JOIN (SELECT store_sales.ss_item_sk AS item_sk, date_dim.d_date, sum(sum(store_sales.ss_sales_price)) OVER (PARTITION BY store_sales.ss_item_sk ORDER BY date_dim.d_date ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cume_sales FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (store_sales.ss_item_sk IS NOT NULL AND (date_dim.d_month_seq BETWEEN 1215 AND (1215 + 11)))) GROUP BY store_sales.ss_item_sk, date_dim.d_date) AS store ON ((web.item_sk = store.item_sk) AND (web.d_date = store.d_date))) AS x) AS y WHERE (y.web_cumulative > y.store_cumulative) ORDER BY y.item_sk ASC NULLS LAST, y.d_date ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `y`.`item_sk`, `y`.`d_date`, `y`.`web_sales`, `y`.`store_sales`, `y`.`web_cumulative`, `y`.`store_cumulative` FROM (SELECT `x`.`item_sk`, `x`.`d_date`, `x`.`web_sales`, `x`.`store_sales`, max(`x`.`web_sales`) OVER (PARTITION BY `x`.`item_sk` ORDER BY `x`.`d_date` ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `web_cumulative`, max(`x`.`store_sales`) OVER (PARTITION BY `x`.`item_sk` ORDER BY `x`.`d_date` ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `store_cumulative` FROM (SELECT CASE WHEN `web`.`item_sk` IS NOT NULL THEN `web`.`item_sk` ELSE `store`.`item_sk` END AS `item_sk`, CASE WHEN `web`.`d_date` IS NOT NULL THEN `web`.`d_date` ELSE `store`.`d_date` END AS `d_date`, `web`.`cume_sales` AS `web_sales`, `store`.`cume_sales` AS `store_sales` FROM (SELECT `web_sales`.`ws_item_sk` AS `item_sk`, `date_dim`.`d_date`, sum(sum(`web_sales`.`ws_sales_price`)) OVER (PARTITION BY `web_sales`.`ws_item_sk` ORDER BY `date_dim`.`d_date` ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `cume_sales` FROM `web_sales` JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`web_sales`.`ws_item_sk` IS NOT NULL AND (`date_dim`.`d_month_seq` BETWEEN 1215 AND (1215 + 11)))) GROUP BY `web_sales`.`ws_item_sk`, `date_dim`.`d_date`) AS `web` FULL JOIN (SELECT `store_sales`.`ss_item_sk` AS `item_sk`, `date_dim`.`d_date`, sum(sum(`store_sales`.`ss_sales_price`)) OVER (PARTITION BY `store_sales`.`ss_item_sk` ORDER BY `date_dim`.`d_date` ASC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `cume_sales` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`store_sales`.`ss_item_sk` IS NOT NULL AND (`date_dim`.`d_month_seq` BETWEEN 1215 AND (1215 + 11)))) GROUP BY `store_sales`.`ss_item_sk`, `date_dim`.`d_date`) AS `store` ON ((`web`.`item_sk` = `store`.`item_sk`) AND (`web`.`d_date` = `store`.`d_date`))) AS `x`) AS `y` WHERE (`y`.`web_cumulative` > `y`.`store_cumulative`) ORDER BY `y`.`item_sk` ASC NULLS LAST, `y`.`d_date` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q52_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q52_explain.snap new file mode 100644 index 0000000000..ebab0c006f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q52_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q52" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: dt.d_year ASC NULLS LAST, ext_price DESC NULLS FIRST, brand_id ASC NULLS LAST | +| | Projection: dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price | +| | Aggregate: groupBy=[[dt.d_year, item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: dt.d_date_sk = store_sales.ss_sold_date_sk | +| | Filter: dt.d_moy = Int64(11) AND dt.d_year = Int64(2000) | +| | SubqueryAlias: dt | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manager_id = Int64(1)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price FROM date_dim AS dt JOIN store_sales ON ((dt.d_date_sk = store_sales.ss_sold_date_sk) AND ((dt.d_moy = 11) AND (dt.d_year = 2000))) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (item.i_manager_id = 1)) GROUP BY dt.d_year, item.i_brand, item.i_brand_id ORDER BY dt.d_year ASC NULLS LAST, ext_price DESC NULLS FIRST, brand_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `dt`.`d_year`, `item`.`i_brand_id` AS `brand_id`, `item`.`i_brand` AS `brand`, sum(`store_sales`.`ss_ext_sales_price`) AS `ext_price` FROM `date_dim` AS `dt` JOIN `store_sales` ON ((`dt`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND ((`dt`.`d_moy` = 11) AND (`dt`.`d_year` = 2000))) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_manager_id` = 1)) GROUP BY `dt`.`d_year`, `item`.`i_brand`, `item`.`i_brand_id` ORDER BY `dt`.`d_year` ASC NULLS LAST, `ext_price` DESC NULLS FIRST, `brand_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q53_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q53_explain.snap new file mode 100644 index 0000000000..93d21c9a4d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q53_explain.snap @@ -0,0 +1,29 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q53" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: tmp1.avg_quarterly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST, tmp1.i_manufact_id ASC NULLS LAST | +| | Projection: tmp1.i_manufact_id, tmp1.sum_sales, tmp1.avg_quarterly_sales | +| | Filter: CASE WHEN tmp1.avg_quarterly_sales > Int64(0) THEN abs(tmp1.sum_sales - tmp1.avg_quarterly_sales) / tmp1.avg_quarterly_sales ELSE NULL END > Float64(0.1) | +| | SubqueryAlias: tmp1 | +| | Projection: item.i_manufact_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_quarterly_sales | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_manufact_id, date_dim.d_qoy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_manufact_id], full_filters=[item.i_category IN ([Utf8("Books"), Utf8("Children"), Utf8("Electronics")]) AND item.i_class IN ([Utf8("personal"), Utf8("portable"), Utf8("reference"), Utf8("self-help")]) AND item.i_brand IN ([Utf8("scholaramalgamalg #14"), Utf8("scholaramalgamalg #7"), Utf8("exportiunivamalg #9"), Utf8("scholaramalgamalg #9")]) OR item.i_category IN ([Utf8("Women"), Utf8("Music"), Utf8("Men")]) AND item.i_class IN ([Utf8("accessories"), Utf8("classical"), Utf8("fragrances"), Utf8("pants")]) AND item.i_brand IN ([Utf8("amalgimporto #1"), Utf8("edu packscholar #1"), Utf8("exportiimporto #1"), Utf8("importoamalg #1")])] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_qoy], full_filters=[date_dim.d_month_seq IN ([Int64(1197), Int64(1197) + Int64(1), Int64(1197) + Int64(2), Int64(1197) + Int64(3), Int64(1197) + Int64(4), Int64(1197) + Int64(5), Int64(1197) + Int64(6), Int64(1197) + Int64(7), Int64(1197) + Int64(8), Int64(1197) + Int64(9), Int64(1197) + Int64(10), Int64(1197) + Int64(11)])] | +| | TableScan: store projection=[s_store_sk] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT tmp1.i_manufact_id, tmp1.sum_sales, tmp1.avg_quarterly_sales FROM (SELECT item.i_manufact_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) OVER (PARTITION BY item.i_manufact_id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS avg_quarterly_sales FROM item JOIN store_sales ON ((store_sales.ss_item_sk = item.i_item_sk) AND (((item.i_category IN ('Books', 'Children', 'Electronics') AND item.i_class IN ('personal', 'portable', 'reference', 'self-help')) AND item.i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR ((item.i_category IN ('Women', 'Music', 'Men') AND item.i_class IN ('accessories', 'classical', 'fragrances', 'pants')) AND item.i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND date_dim.d_month_seq IN (1197, (1197 + 1), (1197 + 2), (1197 + 3), (1197 + 4), (1197 + 5), (1197 + 6), (1197 + 7), (1197 + 8), (1197 + 9), (1197 + 10), (1197 + 11))) JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) GROUP BY item.i_manufact_id, date_dim.d_qoy) AS tmp1 WHERE (CASE WHEN (tmp1.avg_quarterly_sales > 0) THEN (abs((tmp1.sum_sales - tmp1.avg_quarterly_sales)) / tmp1.avg_quarterly_sales) ELSE NULL END > 0.1) ORDER BY tmp1.avg_quarterly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST, tmp1.i_manufact_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `tmp1`.`i_manufact_id`, `tmp1`.`sum_sales`, `tmp1`.`avg_quarterly_sales` FROM (SELECT `item`.`i_manufact_id`, sum(`store_sales`.`ss_sales_price`) AS `sum_sales`, avg(sum(`store_sales`.`ss_sales_price`)) OVER (PARTITION BY `item`.`i_manufact_id` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `avg_quarterly_sales` FROM `item` JOIN `store_sales` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (((`item`.`i_category` IN ('Books', 'Children', 'Electronics') AND `item`.`i_class` IN ('personal', 'portable', 'reference', 'self-help')) AND `item`.`i_brand` IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR ((`item`.`i_category` IN ('Women', 'Music', 'Men') AND `item`.`i_class` IN ('accessories', 'classical', 'fragrances', 'pants')) AND `item`.`i_brand` IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_month_seq` IN (1197, (1197 + 1), (1197 + 2), (1197 + 3), (1197 + 4), (1197 + 5), (1197 + 6), (1197 + 7), (1197 + 8), (1197 + 9), (1197 + 10), (1197 + 11))) JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) GROUP BY `item`.`i_manufact_id`, `date_dim`.`d_qoy`) AS `tmp1` WHERE (CASE WHEN (`tmp1`.`avg_quarterly_sales` > 0) THEN (abs((`tmp1`.`sum_sales` - `tmp1`.`avg_quarterly_sales`)) / `tmp1`.`avg_quarterly_sales`) ELSE NULL END > 0.1) ORDER BY `tmp1`.`avg_quarterly_sales` ASC NULLS LAST, `tmp1`.`sum_sales` ASC NULLS LAST, `tmp1`.`i_manufact_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q54_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q54_explain.snap new file mode 100644 index 0000000000..13456bc524 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q54_explain.snap @@ -0,0 +1,57 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q54" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: segments.segment ASC NULLS LAST, num_customers ASC NULLS LAST | +| | Projection: segments.segment, count(*) AS num_customers, segments.segment * Int64(50) AS segment_base | +| | Aggregate: groupBy=[[segments.segment]], aggr=[[count(*)]] | +| | SubqueryAlias: segments | +| | Projection: CAST(my_revenue.revenue / Int64(50) AS Int32) AS segment | +| | SubqueryAlias: my_revenue | +| | Projection: sum(store_sales.ss_ext_sales_price) AS revenue | +| | Aggregate: groupBy=[[my_customers.c_customer_sk]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer_address.ca_county = store.s_county AND customer_address.ca_state = store.s_state | +| | Inner Join: Filter: my_customers.c_current_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: my_customers.c_customer_sk = store_sales.ss_customer_sk | +| | SubqueryAlias: my_customers | +| | Distinct: | +| | Projection: customer.c_customer_sk, customer.c_current_addr_sk | +| | Inner Join: Filter: customer.c_customer_sk = cs_or_ws_sales.customer_sk | +| | Inner Join: Filter: cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: cs_or_ws_sales.item_sk = item.i_item_sk | +| | SubqueryAlias: cs_or_ws_sales | +| | Union | +| | Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] | +| | Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_bill_customer_sk AS customer_sk, web_sales.ws_item_sk AS item_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk] | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_category = Utf8("Men"), item.i_class = Utf8("shirts")] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int64(4), date_dim.d_year = Int64(1998)] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_sales_price] | +| | TableScan: customer_address projection=[ca_address_sk, ca_county, ca_state] | +| | TableScan: store projection=[s_county, s_state] | +| | Filter: date_dim.d_month_seq BETWEEN () AND () | +| | Subquery: | +| | Distinct: | +| | Projection: date_dim.d_month_seq + Int64(1) | +| | Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(4) | +| | TableScan: date_dim | +| | Subquery: | +| | Distinct: | +| | Projection: date_dim.d_month_seq + Int64(3) | +| | Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(4) | +| | TableScan: date_dim | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT segments.segment, count(*) AS num_customers, (segments.segment * 50) AS segment_base FROM (SELECT CAST((my_revenue.revenue / 50) AS INTEGER) AS segment FROM (SELECT sum(store_sales.ss_ext_sales_price) AS revenue FROM (SELECT DISTINCT customer.c_customer_sk, customer.c_current_addr_sk FROM (SELECT catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk FROM catalog_sales UNION ALL SELECT web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_bill_customer_sk AS customer_sk, web_sales.ws_item_sk AS item_sk FROM web_sales) AS cs_or_ws_sales JOIN item ON ((cs_or_ws_sales.item_sk = item.i_item_sk) AND ((item.i_category = 'Men') AND (item.i_class = 'shirts'))) JOIN date_dim ON ((cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_moy = 4) AND (date_dim.d_year = 1998))) JOIN customer ON (customer.c_customer_sk = cs_or_ws_sales.customer_sk)) AS my_customers JOIN store_sales ON (my_customers.c_customer_sk = store_sales.ss_customer_sk) JOIN customer_address ON (my_customers.c_current_addr_sk = customer_address.ca_address_sk) JOIN store ON ((customer_address.ca_county = store.s_county) AND (customer_address.ca_state = store.s_state)) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_month_seq BETWEEN (SELECT DISTINCT (date_dim.d_month_seq + 1) FROM date_dim WHERE ((date_dim.d_year = 1998) AND (date_dim.d_moy = 4))) AND (SELECT DISTINCT (date_dim.d_month_seq + 3) FROM date_dim WHERE ((date_dim.d_year = 1998) AND (date_dim.d_moy = 4))))) GROUP BY my_customers.c_customer_sk) AS my_revenue) AS segments GROUP BY segments.segment ORDER BY segments.segment ASC NULLS LAST, num_customers ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `segments`.`segment`, count(*) AS `num_customers`, (`segments`.`segment` * 50) AS `segment_base` FROM (SELECT CAST((`my_revenue`.`revenue` / 50) AS INTEGER) AS `segment` FROM (SELECT sum(`store_sales`.`ss_ext_sales_price`) AS `revenue` FROM (SELECT DISTINCT `customer`.`c_customer_sk`, `customer`.`c_current_addr_sk` FROM (SELECT `catalog_sales`.`cs_sold_date_sk` AS `sold_date_sk`, `catalog_sales`.`cs_bill_customer_sk` AS `customer_sk`, `catalog_sales`.`cs_item_sk` AS `item_sk` FROM `catalog_sales` UNION ALL SELECT `web_sales`.`ws_sold_date_sk` AS `sold_date_sk`, `web_sales`.`ws_bill_customer_sk` AS `customer_sk`, `web_sales`.`ws_item_sk` AS `item_sk` FROM `web_sales`) AS `cs_or_ws_sales` JOIN `item` ON ((`cs_or_ws_sales`.`item_sk` = `item`.`i_item_sk`) AND ((`item`.`i_category` = 'Men') AND (`item`.`i_class` = 'shirts'))) JOIN `date_dim` ON ((`cs_or_ws_sales`.`sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_moy` = 4) AND (`date_dim`.`d_year` = 1998))) JOIN `customer` ON (`customer`.`c_customer_sk` = `cs_or_ws_sales`.`customer_sk`)) AS `my_customers` JOIN `store_sales` ON (`my_customers`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) JOIN `customer_address` ON (`my_customers`.`c_current_addr_sk` = `customer_address`.`ca_address_sk`) JOIN `store` ON ((`customer_address`.`ca_county` = `store`.`s_county`) AND (`customer_address`.`ca_state` = `store`.`s_state`)) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_month_seq` BETWEEN (SELECT DISTINCT (`date_dim`.`d_month_seq` + 1) FROM `date_dim` WHERE ((`date_dim`.`d_year` = 1998) AND (`date_dim`.`d_moy` = 4))) AND (SELECT DISTINCT (`date_dim`.`d_month_seq` + 3) FROM `date_dim` WHERE ((`date_dim`.`d_year` = 1998) AND (`date_dim`.`d_moy` = 4))))) GROUP BY `my_customers`.`c_customer_sk`) AS `my_revenue`) AS `segments` GROUP BY `segments`.`segment` ORDER BY `segments`.`segment` ASC NULLS LAST, `num_customers` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q55_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q55_explain.snap new file mode 100644 index 0000000000..bb7da84870 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q55_explain.snap @@ -0,0 +1,24 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q55" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: brand_id, brand, ext_price | +| | Sort: ext_price DESC NULLS FIRST, item.i_brand_id ASC NULLS LAST | +| | Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price, item.i_brand_id | +| | Aggregate: groupBy=[[item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int64(12), date_dim.d_year = Int64(1998)] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manager_id = Int64(20)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price FROM date_dim JOIN store_sales ON ((date_dim.d_date_sk = store_sales.ss_sold_date_sk) AND ((date_dim.d_moy = 12) AND (date_dim.d_year = 1998))) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (item.i_manager_id = 20)) GROUP BY item.i_brand, item.i_brand_id ORDER BY ext_price DESC NULLS FIRST, item.i_brand_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_brand_id` AS `brand_id`, `item`.`i_brand` AS `brand`, sum(`store_sales`.`ss_ext_sales_price`) AS `ext_price` FROM `date_dim` JOIN `store_sales` ON ((`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND ((`date_dim`.`d_moy` = 12) AND (`date_dim`.`d_year` = 1998))) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_manager_id` = 20)) GROUP BY `item`.`i_brand`, `item`.`i_brand_id` ORDER BY `ext_price` DESC NULLS FIRST, `item`.`i_brand_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q56_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q56_explain.snap new file mode 100644 index 0000000000..fd9e61d53f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q56_explain.snap @@ -0,0 +1,69 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q56" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: total_sales ASC NULLS LAST, tmp1.i_item_id ASC NULLS LAST | +| | Projection: tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales | +| | Aggregate: groupBy=[[tmp1.i_item_id]], aggr=[[sum(tmp1.total_sales)]] | +| | SubqueryAlias: tmp1 | +| | Union | +| | Union | +| | Projection: ss.i_item_id, ss.total_sales | +| | SubqueryAlias: ss | +| | Projection: item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(5)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-5)] | +| | Filter: item.i_item_id IN () | +| | Subquery: | +| | Projection: item.i_item_id | +| | Filter: item.i_color IN ([Utf8("powder"), Utf8("goldenrod"), Utf8("bisque")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Projection: cs.i_item_id, cs.total_sales | +| | SubqueryAlias: cs | +| | Projection: item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | Inner Join: Filter: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(5)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-5)] | +| | Filter: item.i_item_id IN () | +| | Subquery: | +| | Projection: item.i_item_id | +| | Filter: item.i_color IN ([Utf8("powder"), Utf8("goldenrod"), Utf8("bisque")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Projection: ws.i_item_id, ws.total_sales | +| | SubqueryAlias: ws | +| | Projection: item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_item_sk = item.i_item_sk | +| | Inner Join: Filter: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1998), date_dim.d_moy = Int64(5)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-5)] | +| | Filter: item.i_item_id IN () | +| | Subquery: | +| | Projection: item.i_item_id | +| | Filter: item.i_color IN ([Utf8("powder"), Utf8("goldenrod"), Utf8("bisque")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales FROM (SELECT ss.i_item_id, ss.total_sales FROM (SELECT item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 1998) AND (date_dim.d_moy = 5))) JOIN customer_address ON ((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -5)) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND item.i_item_id IN (SELECT item.i_item_id FROM item WHERE item.i_color IN ('powder', 'goldenrod', 'bisque'))) GROUP BY item.i_item_id) AS ss UNION ALL SELECT cs.i_item_id, cs.total_sales FROM (SELECT item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales FROM catalog_sales JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 1998) AND (date_dim.d_moy = 5))) JOIN customer_address ON ((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -5)) JOIN item ON ((catalog_sales.cs_item_sk = item.i_item_sk) AND item.i_item_id IN (SELECT item.i_item_id FROM item WHERE item.i_color IN ('powder', 'goldenrod', 'bisque'))) GROUP BY item.i_item_id) AS cs UNION ALL SELECT ws.i_item_id, ws.total_sales FROM (SELECT item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales FROM web_sales JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 1998) AND (date_dim.d_moy = 5))) JOIN customer_address ON ((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -5)) JOIN item ON ((web_sales.ws_item_sk = item.i_item_sk) AND item.i_item_id IN (SELECT item.i_item_id FROM item WHERE item.i_color IN ('powder', 'goldenrod', 'bisque'))) GROUP BY item.i_item_id) AS ws) AS tmp1 GROUP BY tmp1.i_item_id ORDER BY total_sales ASC NULLS LAST, tmp1.i_item_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `tmp1`.`i_item_id`, sum(`tmp1`.`total_sales`) AS `total_sales` FROM (SELECT `ss`.`i_item_id`, `ss`.`total_sales` FROM (SELECT `item`.`i_item_id`, sum(`store_sales`.`ss_ext_sales_price`) AS `total_sales` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 1998) AND (`date_dim`.`d_moy` = 5))) JOIN `customer_address` ON ((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -5)) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND `item`.`i_item_id` IN (SELECT `item`.`i_item_id` FROM `item` WHERE `item`.`i_color` IN ('powder', 'goldenrod', 'bisque'))) GROUP BY `item`.`i_item_id`) AS `ss` UNION ALL SELECT `cs`.`i_item_id`, `cs`.`total_sales` FROM (SELECT `item`.`i_item_id`, sum(`catalog_sales`.`cs_ext_sales_price`) AS `total_sales` FROM `catalog_sales` JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 1998) AND (`date_dim`.`d_moy` = 5))) JOIN `customer_address` ON ((`catalog_sales`.`cs_bill_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -5)) JOIN `item` ON ((`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) AND `item`.`i_item_id` IN (SELECT `item`.`i_item_id` FROM `item` WHERE `item`.`i_color` IN ('powder', 'goldenrod', 'bisque'))) GROUP BY `item`.`i_item_id`) AS `cs` UNION ALL SELECT `ws`.`i_item_id`, `ws`.`total_sales` FROM (SELECT `item`.`i_item_id`, sum(`web_sales`.`ws_ext_sales_price`) AS `total_sales` FROM `web_sales` JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 1998) AND (`date_dim`.`d_moy` = 5))) JOIN `customer_address` ON ((`web_sales`.`ws_bill_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -5)) JOIN `item` ON ((`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) AND `item`.`i_item_id` IN (SELECT `item`.`i_item_id` FROM `item` WHERE `item`.`i_color` IN ('powder', 'goldenrod', 'bisque'))) GROUP BY `item`.`i_item_id`) AS `ws`) AS `tmp1` GROUP BY `tmp1`.`i_item_id` ORDER BY `total_sales` ASC NULLS LAST, `tmp1`.`i_item_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q57_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q57_explain.snap new file mode 100644 index 0000000000..08db001914 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q57_explain.snap @@ -0,0 +1,58 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q57" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: v2.sum_sales - v2.avg_monthly_sales ASC NULLS LAST, v2.psum ASC NULLS LAST | +| | Projection: v2.cc_name, v2.d_year, v2.d_moy, v2.avg_monthly_sales, v2.sum_sales, v2.psum, v2.nsum | +| | Filter: v2.d_year = Int64(2000) AND v2.avg_monthly_sales > Int64(0) AND CASE WHEN v2.avg_monthly_sales > Int64(0) THEN abs(v2.sum_sales - v2.avg_monthly_sales) / v2.avg_monthly_sales ELSE NULL END > Float64(0.1) | +| | SubqueryAlias: v2 | +| | Projection: v1.cc_name, v1.d_year, v1.d_moy, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum | +| | Inner Join: Filter: v1.i_category = v1_lead.i_category AND v1.i_brand = v1_lead.i_brand AND v1.cc_name = v1_lead.cc_name AND v1.rn = v1_lead.rn - Int64(1) | +| | Inner Join: Filter: v1.i_category = v1_lag.i_category AND v1.i_brand = v1_lag.i_brand AND v1.cc_name = v1_lag.cc_name AND v1.rn = v1_lag.rn + Int64(1) | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy, sum(catalog_sales.cs_sales_price) AS sum_sales, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Inner Join: Filter: call_center.cc_call_center_sk = catalog_sales.cs_call_center_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2000) - Int64(1) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) + Int64(1) AND date_dim.d_moy = Int64(1)] | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| | SubqueryAlias: v1_lag | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Inner Join: Filter: call_center.cc_call_center_sk = catalog_sales.cs_call_center_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2000) - Int64(1) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) + Int64(1) AND date_dim.d_moy = Int64(1)] | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| | SubqueryAlias: v1_lead | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Inner Join: Filter: call_center.cc_call_center_sk = catalog_sales.cs_call_center_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2000) OR date_dim.d_year = Int64(2000) - Int64(1) AND date_dim.d_moy = Int64(12) OR date_dim.d_year = Int64(2000) + Int64(1) AND date_dim.d_moy = Int64(1)] | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT v2.cc_name, v2.d_year, v2.d_moy, v2.avg_monthly_sales, v2.sum_sales, v2.psum, v2.nsum FROM (SELECT v1.cc_name, v1.d_year, v1.d_moy, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum FROM (SELECT item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy, sum(catalog_sales.cs_sales_price) AS sum_sales, avg(sum(catalog_sales.cs_sales_price)) OVER (PARTITION BY item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS avg_monthly_sales, rank() OVER (PARTITION BY item.i_category, item.i_brand, call_center.cc_name ORDER BY date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rn FROM item JOIN catalog_sales ON (catalog_sales.cs_item_sk = item.i_item_sk) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (((date_dim.d_year = 2000) OR ((date_dim.d_year = (2000 - 1)) AND (date_dim.d_moy = 12))) OR ((date_dim.d_year = (2000 + 1)) AND (date_dim.d_moy = 1)))) JOIN call_center ON (call_center.cc_call_center_sk = catalog_sales.cs_call_center_sk) GROUP BY item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy) AS v1 JOIN (SELECT item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() OVER (PARTITION BY item.i_category, item.i_brand, call_center.cc_name ORDER BY date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rn FROM item JOIN catalog_sales ON (catalog_sales.cs_item_sk = item.i_item_sk) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (((date_dim.d_year = 2000) OR ((date_dim.d_year = (2000 - 1)) AND (date_dim.d_moy = 12))) OR ((date_dim.d_year = (2000 + 1)) AND (date_dim.d_moy = 1)))) JOIN call_center ON (call_center.cc_call_center_sk = catalog_sales.cs_call_center_sk) GROUP BY item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy) AS v1_lag ON ((((v1.i_category = v1_lag.i_category) AND (v1.i_brand = v1_lag.i_brand)) AND (v1.cc_name = v1_lag.cc_name)) AND (v1.rn = (v1_lag.rn + 1))) JOIN (SELECT item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() OVER (PARTITION BY item.i_category, item.i_brand, call_center.cc_name ORDER BY date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rn FROM item JOIN catalog_sales ON (catalog_sales.cs_item_sk = item.i_item_sk) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (((date_dim.d_year = 2000) OR ((date_dim.d_year = (2000 - 1)) AND (date_dim.d_moy = 12))) OR ((date_dim.d_year = (2000 + 1)) AND (date_dim.d_moy = 1)))) JOIN call_center ON (call_center.cc_call_center_sk = catalog_sales.cs_call_center_sk) GROUP BY item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy) AS v1_lead ON ((((v1.i_category = v1_lead.i_category) AND (v1.i_brand = v1_lead.i_brand)) AND (v1.cc_name = v1_lead.cc_name)) AND (v1.rn = (v1_lead.rn - 1)))) AS v2 WHERE (((v2.d_year = 2000) AND (v2.avg_monthly_sales > 0)) AND (CASE WHEN (v2.avg_monthly_sales > 0) THEN (abs((v2.sum_sales - v2.avg_monthly_sales)) / v2.avg_monthly_sales) ELSE NULL END > 0.1)) ORDER BY (v2.sum_sales - v2.avg_monthly_sales) ASC NULLS LAST, v2.psum ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `v2`.`cc_name`, `v2`.`d_year`, `v2`.`d_moy`, `v2`.`avg_monthly_sales`, `v2`.`sum_sales`, `v2`.`psum`, `v2`.`nsum` FROM (SELECT `v1`.`cc_name`, `v1`.`d_year`, `v1`.`d_moy`, `v1`.`avg_monthly_sales`, `v1`.`sum_sales`, `v1_lag`.`sum_sales` AS `psum`, `v1_lead`.`sum_sales` AS `nsum` FROM (SELECT `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name`, `date_dim`.`d_year`, `date_dim`.`d_moy`, sum(`catalog_sales`.`cs_sales_price`) AS `sum_sales`, avg(sum(`catalog_sales`.`cs_sales_price`)) OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name`, `date_dim`.`d_year` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `avg_monthly_sales`, rank() OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name` ORDER BY `date_dim`.`d_year` ASC NULLS LAST, `date_dim`.`d_moy` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rn` FROM `item` JOIN `catalog_sales` ON (`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (((`date_dim`.`d_year` = 2000) OR ((`date_dim`.`d_year` = (2000 - 1)) AND (`date_dim`.`d_moy` = 12))) OR ((`date_dim`.`d_year` = (2000 + 1)) AND (`date_dim`.`d_moy` = 1)))) JOIN `call_center` ON (`call_center`.`cc_call_center_sk` = `catalog_sales`.`cs_call_center_sk`) GROUP BY `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name`, `date_dim`.`d_year`, `date_dim`.`d_moy`) AS `v1` JOIN (SELECT `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name`, sum(`catalog_sales`.`cs_sales_price`) AS `sum_sales`, rank() OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name` ORDER BY `date_dim`.`d_year` ASC NULLS LAST, `date_dim`.`d_moy` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rn` FROM `item` JOIN `catalog_sales` ON (`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (((`date_dim`.`d_year` = 2000) OR ((`date_dim`.`d_year` = (2000 - 1)) AND (`date_dim`.`d_moy` = 12))) OR ((`date_dim`.`d_year` = (2000 + 1)) AND (`date_dim`.`d_moy` = 1)))) JOIN `call_center` ON (`call_center`.`cc_call_center_sk` = `catalog_sales`.`cs_call_center_sk`) GROUP BY `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name`, `date_dim`.`d_year`, `date_dim`.`d_moy`) AS `v1_lag` ON ((((`v1`.`i_category` = `v1_lag`.`i_category`) AND (`v1`.`i_brand` = `v1_lag`.`i_brand`)) AND (`v1`.`cc_name` = `v1_lag`.`cc_name`)) AND (`v1`.`rn` = (`v1_lag`.`rn` + 1))) JOIN (SELECT `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name`, sum(`catalog_sales`.`cs_sales_price`) AS `sum_sales`, rank() OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name` ORDER BY `date_dim`.`d_year` ASC NULLS LAST, `date_dim`.`d_moy` ASC NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `rn` FROM `item` JOIN `catalog_sales` ON (`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (((`date_dim`.`d_year` = 2000) OR ((`date_dim`.`d_year` = (2000 - 1)) AND (`date_dim`.`d_moy` = 12))) OR ((`date_dim`.`d_year` = (2000 + 1)) AND (`date_dim`.`d_moy` = 1)))) JOIN `call_center` ON (`call_center`.`cc_call_center_sk` = `catalog_sales`.`cs_call_center_sk`) GROUP BY `item`.`i_category`, `item`.`i_brand`, `call_center`.`cc_name`, `date_dim`.`d_year`, `date_dim`.`d_moy`) AS `v1_lead` ON ((((`v1`.`i_category` = `v1_lead`.`i_category`) AND (`v1`.`i_brand` = `v1_lead`.`i_brand`)) AND (`v1`.`cc_name` = `v1_lead`.`cc_name`)) AND (`v1`.`rn` = (`v1_lead`.`rn` - 1)))) AS `v2` WHERE (((`v2`.`d_year` = 2000) AND (`v2`.`avg_monthly_sales` > 0)) AND (CASE WHEN (`v2`.`avg_monthly_sales` > 0) THEN (abs((`v2`.`sum_sales` - `v2`.`avg_monthly_sales`)) / `v2`.`avg_monthly_sales`) ELSE NULL END > 0.1)) ORDER BY (`v2`.`sum_sales` - `v2`.`avg_monthly_sales`) ASC NULLS LAST, `v2`.`psum` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q58_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q58_explain.snap new file mode 100644 index 0000000000..ef5a33119c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q58_explain.snap @@ -0,0 +1,70 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q58" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: ss_items.item_id ASC NULLS LAST, ss_items.ss_item_rev ASC NULLS LAST | +| | Projection: ss_items.item_id, ss_items.ss_item_rev, ss_items.ss_item_rev / (ss_items.ss_item_rev + cs_items.cs_item_rev + ws_items.ws_item_rev) / Int64(3) * Int64(100) AS ss_dev, cs_items.cs_item_rev, cs_items.cs_item_rev / (ss_items.ss_item_rev + cs_items.cs_item_rev + ws_items.ws_item_rev) / Int64(3) * Int64(100) AS cs_dev, ws_items.ws_item_rev, ws_items.ws_item_rev / (ss_items.ss_item_rev + cs_items.cs_item_rev + ws_items.ws_item_rev) / Int64(3) * Int64(100) AS ws_dev, (ss_items.ss_item_rev + cs_items.cs_item_rev + ws_items.ws_item_rev) / Int64(3) AS average | +| | Inner Join: Filter: ss_items.item_id = ws_items.item_id AND ss_items.ss_item_rev BETWEEN Float64(0.9) * ws_items.ws_item_rev AND Float64(1.1) * ws_items.ws_item_rev AND cs_items.cs_item_rev BETWEEN Float64(0.9) * ws_items.ws_item_rev AND Float64(1.1) * ws_items.ws_item_rev AND ws_items.ws_item_rev BETWEEN Float64(0.9) * ss_items.ss_item_rev AND Float64(1.1) * ss_items.ss_item_rev AND ws_items.ws_item_rev BETWEEN Float64(0.9) * cs_items.cs_item_rev AND Float64(1.1) * cs_items.cs_item_rev | +| | Inner Join: Filter: ss_items.item_id = cs_items.item_id AND ss_items.ss_item_rev BETWEEN Float64(0.9) * cs_items.cs_item_rev AND Float64(1.1) * cs_items.cs_item_rev AND cs_items.cs_item_rev BETWEEN Float64(0.9) * ss_items.ss_item_rev AND Float64(1.1) * ss_items.ss_item_rev | +| | SubqueryAlias: ss_items | +| | Projection: item.i_item_id AS item_id, sum(store_sales.ss_ext_sales_price) AS ss_item_rev | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Filter: date_dim.d_date IN () | +| | Subquery: | +| | Projection: date_dim.d_date | +| | Filter: date_dim.d_week_seq = () | +| | Subquery: | +| | Projection: date_dim.d_week_seq | +| | Filter: date_dim.d_date = Utf8("2000-02-12") | +| | TableScan: date_dim | +| | TableScan: date_dim | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: cs_items | +| | Projection: item.i_item_id AS item_id, sum(catalog_sales.cs_ext_sales_price) AS cs_item_rev | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Filter: date_dim.d_date IN () | +| | Subquery: | +| | Projection: date_dim.d_date | +| | Filter: date_dim.d_week_seq = () | +| | Subquery: | +| | Projection: date_dim.d_week_seq | +| | Filter: date_dim.d_date = Utf8("2000-02-12") | +| | TableScan: date_dim | +| | TableScan: date_dim | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: ws_items | +| | Projection: item.i_item_id AS item_id, sum(web_sales.ws_ext_sales_price) AS ws_item_rev | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: web_sales.ws_item_sk = item.i_item_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Filter: date_dim.d_date IN () | +| | Subquery: | +| | Projection: date_dim.d_date | +| | Filter: date_dim.d_week_seq = () | +| | Subquery: | +| | Projection: date_dim.d_week_seq | +| | Filter: date_dim.d_date = Utf8("2000-02-12") | +| | TableScan: date_dim | +| | TableScan: date_dim | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT ss_items.item_id, ss_items.ss_item_rev, ((ss_items.ss_item_rev / (((ss_items.ss_item_rev + cs_items.cs_item_rev) + ws_items.ws_item_rev) / 3)) * 100) AS ss_dev, cs_items.cs_item_rev, ((cs_items.cs_item_rev / (((ss_items.ss_item_rev + cs_items.cs_item_rev) + ws_items.ws_item_rev) / 3)) * 100) AS cs_dev, ws_items.ws_item_rev, ((ws_items.ws_item_rev / (((ss_items.ss_item_rev + cs_items.cs_item_rev) + ws_items.ws_item_rev) / 3)) * 100) AS ws_dev, (((ss_items.ss_item_rev + cs_items.cs_item_rev) + ws_items.ws_item_rev) / 3) AS average FROM (SELECT item.i_item_id AS item_id, sum(store_sales.ss_ext_sales_price) AS ss_item_rev FROM store_sales JOIN item ON (store_sales.ss_item_sk = item.i_item_sk) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND date_dim.d_date IN (SELECT date_dim.d_date FROM date_dim WHERE (date_dim.d_week_seq = (SELECT date_dim.d_week_seq FROM date_dim WHERE (date_dim.d_date = '2000-02-12'))))) GROUP BY item.i_item_id) AS ss_items JOIN (SELECT item.i_item_id AS item_id, sum(catalog_sales.cs_ext_sales_price) AS cs_item_rev FROM catalog_sales JOIN item ON (catalog_sales.cs_item_sk = item.i_item_sk) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND date_dim.d_date IN (SELECT date_dim.d_date FROM date_dim WHERE (date_dim.d_week_seq = (SELECT date_dim.d_week_seq FROM date_dim WHERE (date_dim.d_date = '2000-02-12'))))) GROUP BY item.i_item_id) AS cs_items ON (((ss_items.item_id = cs_items.item_id) AND (ss_items.ss_item_rev BETWEEN (0.9 * cs_items.cs_item_rev) AND (1.1 * cs_items.cs_item_rev))) AND (cs_items.cs_item_rev BETWEEN (0.9 * ss_items.ss_item_rev) AND (1.1 * ss_items.ss_item_rev))) JOIN (SELECT item.i_item_id AS item_id, sum(web_sales.ws_ext_sales_price) AS ws_item_rev FROM web_sales JOIN item ON (web_sales.ws_item_sk = item.i_item_sk) JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND date_dim.d_date IN (SELECT date_dim.d_date FROM date_dim WHERE (date_dim.d_week_seq = (SELECT date_dim.d_week_seq FROM date_dim WHERE (date_dim.d_date = '2000-02-12'))))) GROUP BY item.i_item_id) AS ws_items ON (((((ss_items.item_id = ws_items.item_id) AND (ss_items.ss_item_rev BETWEEN (0.9 * ws_items.ws_item_rev) AND (1.1 * ws_items.ws_item_rev))) AND (cs_items.cs_item_rev BETWEEN (0.9 * ws_items.ws_item_rev) AND (1.1 * ws_items.ws_item_rev))) AND (ws_items.ws_item_rev BETWEEN (0.9 * ss_items.ss_item_rev) AND (1.1 * ss_items.ss_item_rev))) AND (ws_items.ws_item_rev BETWEEN (0.9 * cs_items.cs_item_rev) AND (1.1 * cs_items.cs_item_rev))) ORDER BY ss_items.item_id ASC NULLS LAST, ss_items.ss_item_rev ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `ss_items`.`item_id`, `ss_items`.`ss_item_rev`, ((`ss_items`.`ss_item_rev` / (((`ss_items`.`ss_item_rev` + `cs_items`.`cs_item_rev`) + `ws_items`.`ws_item_rev`) / 3)) * 100) AS `ss_dev`, `cs_items`.`cs_item_rev`, ((`cs_items`.`cs_item_rev` / (((`ss_items`.`ss_item_rev` + `cs_items`.`cs_item_rev`) + `ws_items`.`ws_item_rev`) / 3)) * 100) AS `cs_dev`, `ws_items`.`ws_item_rev`, ((`ws_items`.`ws_item_rev` / (((`ss_items`.`ss_item_rev` + `cs_items`.`cs_item_rev`) + `ws_items`.`ws_item_rev`) / 3)) * 100) AS `ws_dev`, (((`ss_items`.`ss_item_rev` + `cs_items`.`cs_item_rev`) + `ws_items`.`ws_item_rev`) / 3) AS `average` FROM (SELECT `item`.`i_item_id` AS `item_id`, sum(`store_sales`.`ss_ext_sales_price`) AS `ss_item_rev` FROM `store_sales` JOIN `item` ON (`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_date` IN (SELECT `date_dim`.`d_date` FROM `date_dim` WHERE (`date_dim`.`d_week_seq` = (SELECT `date_dim`.`d_week_seq` FROM `date_dim` WHERE (`date_dim`.`d_date` = '2000-02-12'))))) GROUP BY `item`.`i_item_id`) AS `ss_items` JOIN (SELECT `item`.`i_item_id` AS `item_id`, sum(`catalog_sales`.`cs_ext_sales_price`) AS `cs_item_rev` FROM `catalog_sales` JOIN `item` ON (`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_date` IN (SELECT `date_dim`.`d_date` FROM `date_dim` WHERE (`date_dim`.`d_week_seq` = (SELECT `date_dim`.`d_week_seq` FROM `date_dim` WHERE (`date_dim`.`d_date` = '2000-02-12'))))) GROUP BY `item`.`i_item_id`) AS `cs_items` ON (((`ss_items`.`item_id` = `cs_items`.`item_id`) AND (`ss_items`.`ss_item_rev` BETWEEN (0.9 * `cs_items`.`cs_item_rev`) AND (1.1 * `cs_items`.`cs_item_rev`))) AND (`cs_items`.`cs_item_rev` BETWEEN (0.9 * `ss_items`.`ss_item_rev`) AND (1.1 * `ss_items`.`ss_item_rev`))) JOIN (SELECT `item`.`i_item_id` AS `item_id`, sum(`web_sales`.`ws_ext_sales_price`) AS `ws_item_rev` FROM `web_sales` JOIN `item` ON (`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_date` IN (SELECT `date_dim`.`d_date` FROM `date_dim` WHERE (`date_dim`.`d_week_seq` = (SELECT `date_dim`.`d_week_seq` FROM `date_dim` WHERE (`date_dim`.`d_date` = '2000-02-12'))))) GROUP BY `item`.`i_item_id`) AS `ws_items` ON (((((`ss_items`.`item_id` = `ws_items`.`item_id`) AND (`ss_items`.`ss_item_rev` BETWEEN (0.9 * `ws_items`.`ws_item_rev`) AND (1.1 * `ws_items`.`ws_item_rev`))) AND (`cs_items`.`cs_item_rev` BETWEEN (0.9 * `ws_items`.`ws_item_rev`) AND (1.1 * `ws_items`.`ws_item_rev`))) AND (`ws_items`.`ws_item_rev` BETWEEN (0.9 * `ss_items`.`ss_item_rev`) AND (1.1 * `ss_items`.`ss_item_rev`))) AND (`ws_items`.`ws_item_rev` BETWEEN (0.9 * `cs_items`.`cs_item_rev`) AND (1.1 * `cs_items`.`cs_item_rev`))) ORDER BY `ss_items`.`item_id` ASC NULLS LAST, `ss_items`.`ss_item_rev` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q59_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q59_explain.snap new file mode 100644 index 0000000000..04b10b5c5f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q59_explain.snap @@ -0,0 +1,46 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q59" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: y.s_store_name1 ASC NULLS LAST, y.s_store_id1 ASC NULLS LAST, y.d_week_seq1 ASC NULLS LAST | +| | Projection: y.s_store_name1, y.s_store_id1, y.d_week_seq1, y.sun_sales1 / x.sun_sales2, y.mon_sales1 / x.mon_sales2, y.tue_sales1 / x.tue_sales2, y.wed_sales1 / x.wed_sales2, y.thu_sales1 / x.thu_sales2, y.fri_sales1 / x.fri_sales2, y.sat_sales1 / x.sat_sales2 | +| | Inner Join: Filter: y.s_store_id1 = x.s_store_id2 AND y.d_week_seq1 = x.d_week_seq2 - Int64(52) | +| | SubqueryAlias: y | +| | Projection: store.s_store_name AS s_store_name1, wss.d_week_seq AS d_week_seq1, store.s_store_id AS s_store_id1, wss.sun_sales AS sun_sales1, wss.mon_sales AS mon_sales1, wss.tue_sales AS tue_sales1, wss.wed_sales AS wed_sales1, wss.thu_sales AS thu_sales1, wss.fri_sales AS fri_sales1, wss.sat_sales AS sat_sales1 | +| | Inner Join: Filter: d.d_week_seq = wss.d_week_seq | +| | Inner Join: Filter: wss.ss_store_sk = store.s_store_sk | +| | SubqueryAlias: wss | +| | Projection: date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq, store_sales.ss_store_sk]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | TableScan: store projection=[s_store_sk, s_store_id, s_store_name] | +| | Filter: d.d_month_seq BETWEEN Int64(1206) AND Int64(1206) + Int64(11) | +| | SubqueryAlias: d | +| | TableScan: date_dim projection=[d_month_seq, d_week_seq] | +| | SubqueryAlias: x | +| | Projection: wss.d_week_seq AS d_week_seq2, store.s_store_id AS s_store_id2, wss.sun_sales AS sun_sales2, wss.mon_sales AS mon_sales2, wss.tue_sales AS tue_sales2, wss.wed_sales AS wed_sales2, wss.thu_sales AS thu_sales2, wss.fri_sales AS fri_sales2, wss.sat_sales AS sat_sales2 | +| | Inner Join: Filter: d.d_week_seq = wss.d_week_seq | +| | Inner Join: Filter: wss.ss_store_sk = store.s_store_sk | +| | SubqueryAlias: wss | +| | Projection: date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq, store_sales.ss_store_sk]], aggr=[[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | TableScan: store projection=[s_store_sk, s_store_id] | +| | Filter: d.d_month_seq BETWEEN Int64(1206) + Int64(12) AND Int64(1206) + Int64(23) | +| | SubqueryAlias: d | +| | TableScan: date_dim projection=[d_month_seq, d_week_seq] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT y.s_store_name1, y.s_store_id1, y.d_week_seq1, (y.sun_sales1 / x.sun_sales2), (y.mon_sales1 / x.mon_sales2), (y.tue_sales1 / x.tue_sales2), (y.wed_sales1 / x.wed_sales2), (y.thu_sales1 / x.thu_sales2), (y.fri_sales1 / x.fri_sales2), (y.sat_sales1 / x.sat_sales2) FROM (SELECT store.s_store_name AS s_store_name1, wss.d_week_seq AS d_week_seq1, store.s_store_id AS s_store_id1, wss.sun_sales AS sun_sales1, wss.mon_sales AS mon_sales1, wss.tue_sales AS tue_sales1, wss.wed_sales AS wed_sales1, wss.thu_sales AS thu_sales1, wss.fri_sales AS fri_sales1, wss.sat_sales AS sat_sales1 FROM (SELECT date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN (date_dim.d_day_name = 'Sunday') THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN (date_dim.d_day_name = 'Monday') THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN (date_dim.d_day_name = 'Tuesday') THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN (date_dim.d_day_name = 'Wednesday') THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN (date_dim.d_day_name = 'Thursday') THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN (date_dim.d_day_name = 'Friday') THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN (date_dim.d_day_name = 'Saturday') THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales FROM store_sales JOIN date_dim ON (date_dim.d_date_sk = store_sales.ss_sold_date_sk) GROUP BY date_dim.d_week_seq, store_sales.ss_store_sk) AS wss JOIN store ON (wss.ss_store_sk = store.s_store_sk) JOIN date_dim AS d ON ((d.d_week_seq = wss.d_week_seq) AND (d.d_month_seq BETWEEN 1206 AND (1206 + 11)))) AS y JOIN (SELECT wss.d_week_seq AS d_week_seq2, store.s_store_id AS s_store_id2, wss.sun_sales AS sun_sales2, wss.mon_sales AS mon_sales2, wss.tue_sales AS tue_sales2, wss.wed_sales AS wed_sales2, wss.thu_sales AS thu_sales2, wss.fri_sales AS fri_sales2, wss.sat_sales AS sat_sales2 FROM (SELECT date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN (date_dim.d_day_name = 'Sunday') THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN (date_dim.d_day_name = 'Monday') THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN (date_dim.d_day_name = 'Tuesday') THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN (date_dim.d_day_name = 'Wednesday') THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN (date_dim.d_day_name = 'Thursday') THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN (date_dim.d_day_name = 'Friday') THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN (date_dim.d_day_name = 'Saturday') THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales FROM store_sales JOIN date_dim ON (date_dim.d_date_sk = store_sales.ss_sold_date_sk) GROUP BY date_dim.d_week_seq, store_sales.ss_store_sk) AS wss JOIN store ON (wss.ss_store_sk = store.s_store_sk) JOIN date_dim AS d ON ((d.d_week_seq = wss.d_week_seq) AND (d.d_month_seq BETWEEN (1206 + 12) AND (1206 + 23)))) AS x ON ((y.s_store_id1 = x.s_store_id2) AND (y.d_week_seq1 = (x.d_week_seq2 - 52))) ORDER BY y.s_store_name1 ASC NULLS LAST, y.s_store_id1 ASC NULLS LAST, y.d_week_seq1 ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `y`.`s_store_name1`, `y`.`s_store_id1`, `y`.`d_week_seq1`, (`y`.`sun_sales1` / `x`.`sun_sales2`), (`y`.`mon_sales1` / `x`.`mon_sales2`), (`y`.`tue_sales1` / `x`.`tue_sales2`), (`y`.`wed_sales1` / `x`.`wed_sales2`), (`y`.`thu_sales1` / `x`.`thu_sales2`), (`y`.`fri_sales1` / `x`.`fri_sales2`), (`y`.`sat_sales1` / `x`.`sat_sales2`) FROM (SELECT `store`.`s_store_name` AS `s_store_name1`, `wss`.`d_week_seq` AS `d_week_seq1`, `store`.`s_store_id` AS `s_store_id1`, `wss`.`sun_sales` AS `sun_sales1`, `wss`.`mon_sales` AS `mon_sales1`, `wss`.`tue_sales` AS `tue_sales1`, `wss`.`wed_sales` AS `wed_sales1`, `wss`.`thu_sales` AS `thu_sales1`, `wss`.`fri_sales` AS `fri_sales1`, `wss`.`sat_sales` AS `sat_sales1` FROM (SELECT `date_dim`.`d_week_seq`, `store_sales`.`ss_store_sk`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Sunday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `sun_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Monday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `mon_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Tuesday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `tue_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Wednesday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `wed_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Thursday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `thu_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Friday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `fri_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Saturday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `sat_sales` FROM `store_sales` JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) GROUP BY `date_dim`.`d_week_seq`, `store_sales`.`ss_store_sk`) AS `wss` JOIN `store` ON (`wss`.`ss_store_sk` = `store`.`s_store_sk`) JOIN `date_dim` AS `d` ON ((`d`.`d_week_seq` = `wss`.`d_week_seq`) AND (`d`.`d_month_seq` BETWEEN 1206 AND (1206 + 11)))) AS `y` JOIN (SELECT `wss`.`d_week_seq` AS `d_week_seq2`, `store`.`s_store_id` AS `s_store_id2`, `wss`.`sun_sales` AS `sun_sales2`, `wss`.`mon_sales` AS `mon_sales2`, `wss`.`tue_sales` AS `tue_sales2`, `wss`.`wed_sales` AS `wed_sales2`, `wss`.`thu_sales` AS `thu_sales2`, `wss`.`fri_sales` AS `fri_sales2`, `wss`.`sat_sales` AS `sat_sales2` FROM (SELECT `date_dim`.`d_week_seq`, `store_sales`.`ss_store_sk`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Sunday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `sun_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Monday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `mon_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Tuesday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `tue_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Wednesday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `wed_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Thursday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `thu_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Friday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `fri_sales`, sum(CASE WHEN (`date_dim`.`d_day_name` = 'Saturday') THEN `store_sales`.`ss_sales_price` ELSE NULL END) AS `sat_sales` FROM `store_sales` JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) GROUP BY `date_dim`.`d_week_seq`, `store_sales`.`ss_store_sk`) AS `wss` JOIN `store` ON (`wss`.`ss_store_sk` = `store`.`s_store_sk`) JOIN `date_dim` AS `d` ON ((`d`.`d_week_seq` = `wss`.`d_week_seq`) AND (`d`.`d_month_seq` BETWEEN (1206 + 12) AND (1206 + 23)))) AS `x` ON ((`y`.`s_store_id1` = `x`.`s_store_id2`) AND (`y`.`d_week_seq1` = (`x`.`d_week_seq2` - 52))) ORDER BY `y`.`s_store_name1` ASC NULLS LAST, `y`.`s_store_id1` ASC NULLS LAST, `y`.`d_week_seq1` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q60_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q60_explain.snap new file mode 100644 index 0000000000..67e8184313 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q60_explain.snap @@ -0,0 +1,69 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q60" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: tmp1.i_item_id ASC NULLS LAST, total_sales ASC NULLS LAST | +| | Projection: tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales | +| | Aggregate: groupBy=[[tmp1.i_item_id]], aggr=[[sum(tmp1.total_sales)]] | +| | SubqueryAlias: tmp1 | +| | Union | +| | Union | +| | Projection: ss.i_item_id, ss.total_sales | +| | SubqueryAlias: ss | +| | Projection: item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(10)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-6)] | +| | Filter: item.i_item_id IN () | +| | Subquery: | +| | Projection: item.i_item_id | +| | Filter: item.i_category IN ([Utf8("Shoes")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Projection: cs.i_item_id, cs.total_sales | +| | SubqueryAlias: cs | +| | Projection: item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | Inner Join: Filter: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(10)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-6)] | +| | Filter: item.i_item_id IN () | +| | Subquery: | +| | Projection: item.i_item_id | +| | Filter: item.i_category IN ([Utf8("Shoes")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Projection: ws.i_item_id, ws.total_sales | +| | SubqueryAlias: ws | +| | Projection: item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_item_sk = item.i_item_sk | +| | Inner Join: Filter: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2001), date_dim.d_moy = Int64(10)] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-6)] | +| | Filter: item.i_item_id IN () | +| | Subquery: | +| | Projection: item.i_item_id | +| | Filter: item.i_category IN ([Utf8("Shoes")]) | +| | TableScan: item | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales FROM (SELECT ss.i_item_id, ss.total_sales FROM (SELECT item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2001) AND (date_dim.d_moy = 10))) JOIN customer_address ON ((store_sales.ss_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -6)) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND item.i_item_id IN (SELECT item.i_item_id FROM item WHERE item.i_category IN ('Shoes'))) GROUP BY item.i_item_id) AS ss UNION ALL SELECT cs.i_item_id, cs.total_sales FROM (SELECT item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales FROM catalog_sales JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2001) AND (date_dim.d_moy = 10))) JOIN customer_address ON ((catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -6)) JOIN item ON ((catalog_sales.cs_item_sk = item.i_item_sk) AND item.i_item_id IN (SELECT item.i_item_id FROM item WHERE item.i_category IN ('Shoes'))) GROUP BY item.i_item_id) AS cs UNION ALL SELECT ws.i_item_id, ws.total_sales FROM (SELECT item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales FROM web_sales JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2001) AND (date_dim.d_moy = 10))) JOIN customer_address ON ((web_sales.ws_bill_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_gmt_offset = -6)) JOIN item ON ((web_sales.ws_item_sk = item.i_item_sk) AND item.i_item_id IN (SELECT item.i_item_id FROM item WHERE item.i_category IN ('Shoes'))) GROUP BY item.i_item_id) AS ws) AS tmp1 GROUP BY tmp1.i_item_id ORDER BY tmp1.i_item_id ASC NULLS LAST, total_sales ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `tmp1`.`i_item_id`, sum(`tmp1`.`total_sales`) AS `total_sales` FROM (SELECT `ss`.`i_item_id`, `ss`.`total_sales` FROM (SELECT `item`.`i_item_id`, sum(`store_sales`.`ss_ext_sales_price`) AS `total_sales` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2001) AND (`date_dim`.`d_moy` = 10))) JOIN `customer_address` ON ((`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -6)) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND `item`.`i_item_id` IN (SELECT `item`.`i_item_id` FROM `item` WHERE `item`.`i_category` IN ('Shoes'))) GROUP BY `item`.`i_item_id`) AS `ss` UNION ALL SELECT `cs`.`i_item_id`, `cs`.`total_sales` FROM (SELECT `item`.`i_item_id`, sum(`catalog_sales`.`cs_ext_sales_price`) AS `total_sales` FROM `catalog_sales` JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2001) AND (`date_dim`.`d_moy` = 10))) JOIN `customer_address` ON ((`catalog_sales`.`cs_bill_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -6)) JOIN `item` ON ((`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) AND `item`.`i_item_id` IN (SELECT `item`.`i_item_id` FROM `item` WHERE `item`.`i_category` IN ('Shoes'))) GROUP BY `item`.`i_item_id`) AS `cs` UNION ALL SELECT `ws`.`i_item_id`, `ws`.`total_sales` FROM (SELECT `item`.`i_item_id`, sum(`web_sales`.`ws_ext_sales_price`) AS `total_sales` FROM `web_sales` JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2001) AND (`date_dim`.`d_moy` = 10))) JOIN `customer_address` ON ((`web_sales`.`ws_bill_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_gmt_offset` = -6)) JOIN `item` ON ((`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) AND `item`.`i_item_id` IN (SELECT `item`.`i_item_id` FROM `item` WHERE `item`.`i_category` IN ('Shoes'))) GROUP BY `item`.`i_item_id`) AS `ws`) AS `tmp1` GROUP BY `tmp1`.`i_item_id` ORDER BY `tmp1`.`i_item_id` ASC NULLS LAST, `total_sales` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q61_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q61_explain.snap new file mode 100644 index 0000000000..ec318087fa --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q61_explain.snap @@ -0,0 +1,48 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q61" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: promotional_sales.promotions ASC NULLS LAST, all_sales.total ASC NULLS LAST | +| | Projection: promotional_sales.promotions, all_sales.total, CAST(promotional_sales.promotions AS Decimal128(15, 4)) / CAST(all_sales.total AS Decimal128(15, 4)) * Int64(100) | +| | Cross Join: | +| | SubqueryAlias: promotional_sales | +| | Projection: sum(store_sales.ss_ext_sales_price) AS promotions | +| | Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: customer_address.ca_address_sk = customer.c_current_addr_sk | +| | Inner Join: Filter: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_promo_sk, ss_ext_sales_price] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_gmt_offset = Int64(-6)] | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_dmail = Utf8("Y") OR promotion.p_channel_email = Utf8("Y") OR promotion.p_channel_tv = Utf8("Y")] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2002), date_dim.d_moy = Int64(11)] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-6)] | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_category = Utf8("Sports")] | +| | SubqueryAlias: all_sales | +| | Projection: sum(store_sales.ss_ext_sales_price) AS total | +| | Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: customer_address.ca_address_sk = customer.c_current_addr_sk | +| | Inner Join: Filter: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_gmt_offset = Int64(-6)] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2002), date_dim.d_moy = Int64(11)] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-6)] | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_category = Utf8("Sports")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT promotional_sales.promotions, all_sales.total, ((CAST(promotional_sales.promotions AS DECIMAL(15,4)) / CAST(all_sales.total AS DECIMAL(15,4))) * 100) FROM (SELECT sum(store_sales.ss_ext_sales_price) AS promotions FROM store_sales JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_gmt_offset = -6)) JOIN promotion ON ((store_sales.ss_promo_sk = promotion.p_promo_sk) AND (((promotion.p_channel_dmail = 'Y') OR (promotion.p_channel_email = 'Y')) OR (promotion.p_channel_tv = 'Y'))) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2002) AND (date_dim.d_moy = 11))) JOIN customer ON (store_sales.ss_customer_sk = customer.c_customer_sk) JOIN customer_address ON ((customer_address.ca_address_sk = customer.c_current_addr_sk) AND (customer_address.ca_gmt_offset = -6)) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (item.i_category = 'Sports'))) AS promotional_sales CROSS JOIN (SELECT sum(store_sales.ss_ext_sales_price) AS total FROM store_sales JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_gmt_offset = -6)) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2002) AND (date_dim.d_moy = 11))) JOIN customer ON (store_sales.ss_customer_sk = customer.c_customer_sk) JOIN customer_address ON ((customer_address.ca_address_sk = customer.c_current_addr_sk) AND (customer_address.ca_gmt_offset = -6)) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (item.i_category = 'Sports'))) AS all_sales ORDER BY promotional_sales.promotions ASC NULLS LAST, all_sales.total ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `promotional_sales`.`promotions`, `all_sales`.`total`, ((CAST(`promotional_sales`.`promotions` AS DECIMAL(15,4)) / CAST(`all_sales`.`total` AS DECIMAL(15,4))) * 100) FROM (SELECT sum(`store_sales`.`ss_ext_sales_price`) AS `promotions` FROM `store_sales` JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_gmt_offset` = -6)) JOIN `promotion` ON ((`store_sales`.`ss_promo_sk` = `promotion`.`p_promo_sk`) AND (((`promotion`.`p_channel_dmail` = 'Y') OR (`promotion`.`p_channel_email` = 'Y')) OR (`promotion`.`p_channel_tv` = 'Y'))) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2002) AND (`date_dim`.`d_moy` = 11))) JOIN `customer` ON (`store_sales`.`ss_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` ON ((`customer_address`.`ca_address_sk` = `customer`.`c_current_addr_sk`) AND (`customer_address`.`ca_gmt_offset` = -6)) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_category` = 'Sports'))) AS `promotional_sales` CROSS JOIN (SELECT sum(`store_sales`.`ss_ext_sales_price`) AS `total` FROM `store_sales` JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_gmt_offset` = -6)) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2002) AND (`date_dim`.`d_moy` = 11))) JOIN `customer` ON (`store_sales`.`ss_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` ON ((`customer_address`.`ca_address_sk` = `customer`.`c_current_addr_sk`) AND (`customer_address`.`ca_gmt_offset` = -6)) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_category` = 'Sports'))) AS `all_sales` ORDER BY `promotional_sales`.`promotions` ASC NULLS LAST, `all_sales`.`total` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q62_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q62_explain.snap new file mode 100644 index 0000000000..31f2efe462 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q62_explain.snap @@ -0,0 +1,28 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q62" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) ASC NULLS LAST, ship_mode.sm_type ASC NULLS LAST, web_site.web_name ASC NULLS LAST | +| | Projection: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), ship_mode.sm_type, web_site.web_name, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days | +| | Aggregate: groupBy=[[substr(warehouse.w_warehouse_name, Int64(1), Int64(20)), ship_mode.sm_type, web_site.web_name]], aggr=[[sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] | +| | Inner Join: Filter: web_sales.ws_ship_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: web_sales.ws_web_site_sk = web_site.web_site_sk | +| | Inner Join: Filter: web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Inner Join: Filter: web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_ship_date_sk, ws_web_site_sk, ws_ship_mode_sk, ws_warehouse_sk] | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | TableScan: ship_mode projection=[sm_ship_mode_sk, sm_type] | +| | TableScan: web_site projection=[web_site_sk, web_name] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1217) AND Int64(1217) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT substr("warehouse".w_warehouse_name, 1, 20), ship_mode.sm_type, web_site.web_name, sum(CASE WHEN ((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) <= 30) THEN 1 ELSE 0 END) AS "30 days", sum(CASE WHEN (((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) > 30) AND ((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) <= 60)) THEN 1 ELSE 0 END) AS "31-60 days", sum(CASE WHEN (((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) > 60) AND ((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) <= 90)) THEN 1 ELSE 0 END) AS "61-90 days", sum(CASE WHEN (((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) > 90) AND ((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) <= 120)) THEN 1 ELSE 0 END) AS "91-120 days", sum(CASE WHEN ((web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk) > 120) THEN 1 ELSE 0 END) AS ">120 days" FROM web_sales JOIN "warehouse" ON (web_sales.ws_warehouse_sk = "warehouse".w_warehouse_sk) JOIN ship_mode ON (web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk) JOIN web_site ON (web_sales.ws_web_site_sk = web_site.web_site_sk) JOIN date_dim ON ((web_sales.ws_ship_date_sk = date_dim.d_date_sk) AND (date_dim.d_month_seq BETWEEN 1217 AND (1217 + 11))) GROUP BY substr("warehouse".w_warehouse_name, 1, 20), ship_mode.sm_type, web_site.web_name ORDER BY substr("warehouse".w_warehouse_name, 1, 20) ASC NULLS LAST, ship_mode.sm_type ASC NULLS LAST, web_site.web_name ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT substr(`warehouse`.`w_warehouse_name`, 1, 20), `ship_mode`.`sm_type`, `web_site`.`web_name`, sum(CASE WHEN ((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) <= 30) THEN 1 ELSE 0 END) AS `30 days`, sum(CASE WHEN (((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) > 30) AND ((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) <= 60)) THEN 1 ELSE 0 END) AS `31-60 days`, sum(CASE WHEN (((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) > 60) AND ((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) <= 90)) THEN 1 ELSE 0 END) AS `61-90 days`, sum(CASE WHEN (((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) > 90) AND ((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) <= 120)) THEN 1 ELSE 0 END) AS `91-120 days`, sum(CASE WHEN ((`web_sales`.`ws_ship_date_sk` - `web_sales`.`ws_sold_date_sk`) > 120) THEN 1 ELSE 0 END) AS `>120 days` FROM `web_sales` JOIN `warehouse` ON (`web_sales`.`ws_warehouse_sk` = `warehouse`.`w_warehouse_sk`) JOIN `ship_mode` ON (`web_sales`.`ws_ship_mode_sk` = `ship_mode`.`sm_ship_mode_sk`) JOIN `web_site` ON (`web_sales`.`ws_web_site_sk` = `web_site`.`web_site_sk`) JOIN `date_dim` ON ((`web_sales`.`ws_ship_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_month_seq` BETWEEN 1217 AND (1217 + 11))) GROUP BY substr(`warehouse`.`w_warehouse_name`, 1, 20), `ship_mode`.`sm_type`, `web_site`.`web_name` ORDER BY substr(`warehouse`.`w_warehouse_name`, 1, 20) ASC NULLS LAST, `ship_mode`.`sm_type` ASC NULLS LAST, `web_site`.`web_name` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q63_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q63_explain.snap new file mode 100644 index 0000000000..f463470dd1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q63_explain.snap @@ -0,0 +1,29 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q63" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: tmp1.i_manager_id ASC NULLS LAST, tmp1.avg_monthly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST | +| | Projection: tmp1.i_manager_id, tmp1.sum_sales, tmp1.avg_monthly_sales | +| | Filter: CASE WHEN tmp1.avg_monthly_sales > Int64(0) THEN abs(tmp1.sum_sales - tmp1.avg_monthly_sales) / tmp1.avg_monthly_sales ELSE NULL END > Float64(0.1) | +| | SubqueryAlias: tmp1 | +| | Projection: item.i_manager_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_manager_id, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_manager_id], full_filters=[item.i_category IN ([Utf8("Books"), Utf8("Children"), Utf8("Electronics")]) AND item.i_class IN ([Utf8("personal"), Utf8("portable"), Utf8("reference"), Utf8("self-help")]) AND item.i_brand IN ([Utf8("scholaramalgamalg #14"), Utf8("scholaramalgamalg #7"), Utf8("exportiunivamalg #9"), Utf8("scholaramalgamalg #9")]) OR item.i_category IN ([Utf8("Women"), Utf8("Music"), Utf8("Men")]) AND item.i_class IN ([Utf8("accessories"), Utf8("classical"), Utf8("fragrances"), Utf8("pants")]) AND item.i_brand IN ([Utf8("amalgimporto #1"), Utf8("edu packscholar #1"), Utf8("exportiimporto #1"), Utf8("importoamalg #1")])] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_moy], full_filters=[date_dim.d_month_seq IN ([Int64(1181), Int64(1181) + Int64(1), Int64(1181) + Int64(2), Int64(1181) + Int64(3), Int64(1181) + Int64(4), Int64(1181) + Int64(5), Int64(1181) + Int64(6), Int64(1181) + Int64(7), Int64(1181) + Int64(8), Int64(1181) + Int64(9), Int64(1181) + Int64(10), Int64(1181) + Int64(11)])] | +| | TableScan: store projection=[s_store_sk] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT tmp1.i_manager_id, tmp1.sum_sales, tmp1.avg_monthly_sales FROM (SELECT item.i_manager_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) OVER (PARTITION BY item.i_manager_id ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS avg_monthly_sales FROM item JOIN store_sales ON ((store_sales.ss_item_sk = item.i_item_sk) AND (((item.i_category IN ('Books', 'Children', 'Electronics') AND item.i_class IN ('personal', 'portable', 'reference', 'self-help')) AND item.i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR ((item.i_category IN ('Women', 'Music', 'Men') AND item.i_class IN ('accessories', 'classical', 'fragrances', 'pants')) AND item.i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND date_dim.d_month_seq IN (1181, (1181 + 1), (1181 + 2), (1181 + 3), (1181 + 4), (1181 + 5), (1181 + 6), (1181 + 7), (1181 + 8), (1181 + 9), (1181 + 10), (1181 + 11))) JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) GROUP BY item.i_manager_id, date_dim.d_moy) AS tmp1 WHERE (CASE WHEN (tmp1.avg_monthly_sales > 0) THEN (abs((tmp1.sum_sales - tmp1.avg_monthly_sales)) / tmp1.avg_monthly_sales) ELSE NULL END > 0.1) ORDER BY tmp1.i_manager_id ASC NULLS LAST, tmp1.avg_monthly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `tmp1`.`i_manager_id`, `tmp1`.`sum_sales`, `tmp1`.`avg_monthly_sales` FROM (SELECT `item`.`i_manager_id`, sum(`store_sales`.`ss_sales_price`) AS `sum_sales`, avg(sum(`store_sales`.`ss_sales_price`)) OVER (PARTITION BY `item`.`i_manager_id` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `avg_monthly_sales` FROM `item` JOIN `store_sales` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (((`item`.`i_category` IN ('Books', 'Children', 'Electronics') AND `item`.`i_class` IN ('personal', 'portable', 'reference', 'self-help')) AND `item`.`i_brand` IN ('scholaramalgamalg #14', 'scholaramalgamalg #7', 'exportiunivamalg #9', 'scholaramalgamalg #9')) OR ((`item`.`i_category` IN ('Women', 'Music', 'Men') AND `item`.`i_class` IN ('accessories', 'classical', 'fragrances', 'pants')) AND `item`.`i_brand` IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1', 'importoamalg #1')))) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_month_seq` IN (1181, (1181 + 1), (1181 + 2), (1181 + 3), (1181 + 4), (1181 + 5), (1181 + 6), (1181 + 7), (1181 + 8), (1181 + 9), (1181 + 10), (1181 + 11))) JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) GROUP BY `item`.`i_manager_id`, `date_dim`.`d_moy`) AS `tmp1` WHERE (CASE WHEN (`tmp1`.`avg_monthly_sales` > 0) THEN (abs((`tmp1`.`sum_sales` - `tmp1`.`avg_monthly_sales`)) / `tmp1`.`avg_monthly_sales`) ELSE NULL END > 0.1) ORDER BY `tmp1`.`i_manager_id` ASC NULLS LAST, `tmp1`.`avg_monthly_sales` ASC NULLS LAST, `tmp1`.`sum_sales` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q64_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q64_explain.snap new file mode 100644 index 0000000000..7597287bc5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q64_explain.snap @@ -0,0 +1,134 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q64" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: cs1.product_name, cs1.store_name, cs1.store_zip, cs1.b_street_number, cs1.b_street_name, cs1.b_city, cs1.b_zip, cs1.c_street_number, cs1.c_street_name, cs1.c_city, cs1.c_zip, cs1.syear, cs1.cnt, s11, s21, s31, s12, s22, s32, cs2.syear, cs2.cnt | +| | Sort: cs1.product_name ASC NULLS LAST, cs1.store_name ASC NULLS LAST, cs2.cnt ASC NULLS LAST, cs1.s1 ASC NULLS LAST, cs2.s1 ASC NULLS LAST | +| | Projection: cs1.product_name, cs1.store_name, cs1.store_zip, cs1.b_street_number, cs1.b_street_name, cs1.b_city, cs1.b_zip, cs1.c_street_number, cs1.c_street_name, cs1.c_city, cs1.c_zip, cs1.syear, cs1.cnt, cs1.s1 AS s11, cs1.s2 AS s21, cs1.s3 AS s31, cs2.s1 AS s12, cs2.s2 AS s22, cs2.s3 AS s32, cs2.syear, cs2.cnt, cs1.s1, cs2.s1 | +| | Inner Join: Filter: cs1.item_sk = cs2.item_sk AND cs2.cnt <= cs1.cnt AND cs1.store_name = cs2.store_name AND cs1.store_zip = cs2.store_zip | +| | Filter: cs1.syear = Int64(2001) | +| | SubqueryAlias: cs1 | +| | SubqueryAlias: cross_sales | +| | Projection: item.i_product_name AS product_name, item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, ad1.ca_street_number AS b_street_number, ad1.ca_street_name AS b_street_name, ad1.ca_city AS b_city, ad1.ca_zip AS b_zip, ad2.ca_street_number AS c_street_number, ad2.ca_street_name AS c_street_name, ad2.ca_city AS c_city, ad2.ca_zip AS c_zip, d1.d_year AS syear, count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 | +| | Aggregate: groupBy=[[item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year]], aggr=[[count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: hd2.hd_income_band_sk = ib2.ib_income_band_sk | +| | Inner Join: Filter: hd1.hd_income_band_sk = ib1.ib_income_band_sk | +| | Inner Join: Filter: customer.c_current_addr_sk = ad2.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_addr_sk = ad1.ca_address_sk | +| | Inner Join: Filter: customer.c_current_hdemo_sk = hd2.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = hd1.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Inner Join: Filter: customer.c_current_cdemo_sk = cd2.cd_demo_sk AND cd1.cd_marital_status != cd2.cd_marital_status | +| | Inner Join: Filter: store_sales.ss_cdemo_sk = cd1.cd_demo_sk | +| | Inner Join: Filter: store_sales.ss_customer_sk = customer.c_customer_sk AND customer.c_first_sales_date_sk = d2.d_date_sk AND customer.c_first_shipto_date_sk = d3.d_date_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Cross Join: | +| | Cross Join: | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = cs_ui.cs_item_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = store_returns.sr_item_sk AND store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] | +| | SubqueryAlias: cs_ui | +| | Projection: catalog_sales.cs_item_sk | +| | Filter: sum(catalog_sales.cs_ext_list_price) > Int64(2) * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit) | +| | Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)]] | +| | Inner Join: Filter: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk AND catalog_sales.cs_order_number = catalog_returns.cr_order_number | +| | TableScan: catalog_sales projection=[cs_item_sk, cs_order_number, cs_ext_list_price] | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] | +| | SubqueryAlias: d1 | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: d2 | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: d3 | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: store projection=[s_store_sk, s_store_name, s_zip] | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] | +| | SubqueryAlias: cd1 | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | SubqueryAlias: cd2 | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | TableScan: promotion projection=[p_promo_sk] | +| | SubqueryAlias: hd1 | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: hd2 | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: ad1 | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ad2 | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ib1 | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | SubqueryAlias: ib2 | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | Filter: item.i_current_price BETWEEN Int64(22) AND Int64(22) + Int64(10) AND item.i_current_price BETWEEN Int64(22) + Int64(1) AND Int64(22) + Int64(15) | +| | TableScan: item projection=[i_item_sk, i_current_price, i_product_name], full_filters=[item.i_color IN ([Utf8("light"), Utf8("cyan"), Utf8("burnished"), Utf8("green"), Utf8("almond"), Utf8("smoke")])] | +| | Filter: cs2.syear = Int64(2001) + Int64(1) | +| | SubqueryAlias: cs2 | +| | SubqueryAlias: cross_sales | +| | Projection: item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, d1.d_year AS syear, count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 | +| | Aggregate: groupBy=[[item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year]], aggr=[[count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: hd2.hd_income_band_sk = ib2.ib_income_band_sk | +| | Inner Join: Filter: hd1.hd_income_band_sk = ib1.ib_income_band_sk | +| | Inner Join: Filter: customer.c_current_addr_sk = ad2.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_addr_sk = ad1.ca_address_sk | +| | Inner Join: Filter: customer.c_current_hdemo_sk = hd2.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = hd1.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Inner Join: Filter: customer.c_current_cdemo_sk = cd2.cd_demo_sk AND cd1.cd_marital_status != cd2.cd_marital_status | +| | Inner Join: Filter: store_sales.ss_cdemo_sk = cd1.cd_demo_sk | +| | Inner Join: Filter: store_sales.ss_customer_sk = customer.c_customer_sk AND customer.c_first_sales_date_sk = d2.d_date_sk AND customer.c_first_shipto_date_sk = d3.d_date_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Cross Join: | +| | Cross Join: | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = cs_ui.cs_item_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = store_returns.sr_item_sk AND store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] | +| | SubqueryAlias: cs_ui | +| | Projection: catalog_sales.cs_item_sk | +| | Filter: sum(catalog_sales.cs_ext_list_price) > Int64(2) * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit) | +| | Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)]] | +| | Inner Join: Filter: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk AND catalog_sales.cs_order_number = catalog_returns.cr_order_number | +| | TableScan: catalog_sales projection=[cs_item_sk, cs_order_number, cs_ext_list_price] | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] | +| | SubqueryAlias: d1 | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: d2 | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: d3 | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: store projection=[s_store_sk, s_store_name, s_zip] | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] | +| | SubqueryAlias: cd1 | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | SubqueryAlias: cd2 | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | TableScan: promotion projection=[p_promo_sk] | +| | SubqueryAlias: hd1 | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: hd2 | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: ad1 | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ad2 | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ib1 | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | SubqueryAlias: ib2 | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | Filter: item.i_current_price BETWEEN Int64(22) AND Int64(22) + Int64(10) AND item.i_current_price BETWEEN Int64(22) + Int64(1) AND Int64(22) + Int64(15) | +| | TableScan: item projection=[i_item_sk, i_current_price, i_product_name], full_filters=[item.i_color IN ([Utf8("light"), Utf8("cyan"), Utf8("burnished"), Utf8("green"), Utf8("almond"), Utf8("smoke")])] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT cs1.product_name, cs1.store_name, cs1.store_zip, cs1.b_street_number, cs1.b_street_name, cs1.b_city, cs1.b_zip, cs1.c_street_number, cs1.c_street_name, cs1.c_city, cs1.c_zip, cs1.syear, cs1.cnt, cs1.s1 AS s11, cs1.s2 AS s21, cs1.s3 AS s31, cs2.s1 AS s12, cs2.s2 AS s22, cs2.s3 AS s32, cs2.syear, cs2.cnt FROM (SELECT item.i_product_name AS product_name, item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, ad1.ca_street_number AS b_street_number, ad1.ca_street_name AS b_street_name, ad1.ca_city AS b_city, ad1.ca_zip AS b_zip, ad2.ca_street_number AS c_street_number, ad2.ca_street_name AS c_street_name, ad2.ca_city AS c_city, ad2.ca_zip AS c_zip, d1.d_year AS syear, count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 FROM store_sales JOIN store_returns ON ((store_sales.ss_item_sk = store_returns.sr_item_sk) AND (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) JOIN (SELECT catalog_sales.cs_item_sk FROM catalog_sales JOIN catalog_returns ON ((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) AND (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) GROUP BY catalog_sales.cs_item_sk HAVING (sum(catalog_sales.cs_ext_list_price) > (2 * sum(((catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge) + catalog_returns.cr_store_credit))))) AS cs_ui ON (store_sales.ss_item_sk = cs_ui.cs_item_sk) JOIN date_dim AS d1 ON (store_sales.ss_sold_date_sk = d1.d_date_sk) CROSS JOIN date_dim AS d2 CROSS JOIN date_dim AS d3 JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) JOIN customer ON (((store_sales.ss_customer_sk = customer.c_customer_sk) AND (customer.c_first_sales_date_sk = d2.d_date_sk)) AND (customer.c_first_shipto_date_sk = d3.d_date_sk)) JOIN customer_demographics AS cd1 ON (store_sales.ss_cdemo_sk = cd1.cd_demo_sk) JOIN customer_demographics AS cd2 ON ((customer.c_current_cdemo_sk = cd2.cd_demo_sk) AND (cd1.cd_marital_status <> cd2.cd_marital_status)) JOIN promotion ON (store_sales.ss_promo_sk = promotion.p_promo_sk) JOIN household_demographics AS hd1 ON (store_sales.ss_hdemo_sk = hd1.hd_demo_sk) JOIN household_demographics AS hd2 ON (customer.c_current_hdemo_sk = hd2.hd_demo_sk) JOIN customer_address AS ad1 ON (store_sales.ss_addr_sk = ad1.ca_address_sk) JOIN customer_address AS ad2 ON (customer.c_current_addr_sk = ad2.ca_address_sk) JOIN income_band AS ib1 ON (hd1.hd_income_band_sk = ib1.ib_income_band_sk) JOIN income_band AS ib2 ON (hd2.hd_income_band_sk = ib2.ib_income_band_sk) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (((item.i_current_price BETWEEN 22 AND (22 + 10)) AND (item.i_current_price BETWEEN (22 + 1) AND (22 + 15))) AND item.i_color IN ('light', 'cyan', 'burnished', 'green', 'almond', 'smoke'))) GROUP BY item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year) AS cs1 JOIN (SELECT item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, d1.d_year AS syear, count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 FROM store_sales JOIN store_returns ON ((store_sales.ss_item_sk = store_returns.sr_item_sk) AND (store_sales.ss_ticket_number = store_returns.sr_ticket_number)) JOIN (SELECT catalog_sales.cs_item_sk FROM catalog_sales JOIN catalog_returns ON ((catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) AND (catalog_sales.cs_order_number = catalog_returns.cr_order_number)) GROUP BY catalog_sales.cs_item_sk HAVING (sum(catalog_sales.cs_ext_list_price) > (2 * sum(((catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge) + catalog_returns.cr_store_credit))))) AS cs_ui ON (store_sales.ss_item_sk = cs_ui.cs_item_sk) JOIN date_dim AS d1 ON (store_sales.ss_sold_date_sk = d1.d_date_sk) CROSS JOIN date_dim AS d2 CROSS JOIN date_dim AS d3 JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) JOIN customer ON (((store_sales.ss_customer_sk = customer.c_customer_sk) AND (customer.c_first_sales_date_sk = d2.d_date_sk)) AND (customer.c_first_shipto_date_sk = d3.d_date_sk)) JOIN customer_demographics AS cd1 ON (store_sales.ss_cdemo_sk = cd1.cd_demo_sk) JOIN customer_demographics AS cd2 ON ((customer.c_current_cdemo_sk = cd2.cd_demo_sk) AND (cd1.cd_marital_status <> cd2.cd_marital_status)) JOIN promotion ON (store_sales.ss_promo_sk = promotion.p_promo_sk) JOIN household_demographics AS hd1 ON (store_sales.ss_hdemo_sk = hd1.hd_demo_sk) JOIN household_demographics AS hd2 ON (customer.c_current_hdemo_sk = hd2.hd_demo_sk) JOIN customer_address AS ad1 ON (store_sales.ss_addr_sk = ad1.ca_address_sk) JOIN customer_address AS ad2 ON (customer.c_current_addr_sk = ad2.ca_address_sk) JOIN income_band AS ib1 ON (hd1.hd_income_band_sk = ib1.ib_income_band_sk) JOIN income_band AS ib2 ON (hd2.hd_income_band_sk = ib2.ib_income_band_sk) JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND (((item.i_current_price BETWEEN 22 AND (22 + 10)) AND (item.i_current_price BETWEEN (22 + 1) AND (22 + 15))) AND item.i_color IN ('light', 'cyan', 'burnished', 'green', 'almond', 'smoke'))) GROUP BY item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year) AS cs2 ON ((((cs1.item_sk = cs2.item_sk) AND (cs2.cnt <= cs1.cnt)) AND (cs1.store_name = cs2.store_name)) AND (cs1.store_zip = cs2.store_zip)) WHERE (cs1.syear = 2001) AND (cs2.syear = (2001 + 1)) AND (cs2.syear = (2001 + 1)) ORDER BY cs1.product_name ASC NULLS LAST, cs1.store_name ASC NULLS LAST, cs2.cnt ASC NULLS LAST, cs1.s1 ASC NULLS LAST, cs2.s1 ASC NULLS LAST rewritten_sql=SELECT `cs1`.`product_name`, `cs1`.`store_name`, `cs1`.`store_zip`, `cs1`.`b_street_number`, `cs1`.`b_street_name`, `cs1`.`b_city`, `cs1`.`b_zip`, `cs1`.`c_street_number`, `cs1`.`c_street_name`, `cs1`.`c_city`, `cs1`.`c_zip`, `cs1`.`syear`, `cs1`.`cnt`, `cs1`.`s1` AS `s11`, `cs1`.`s2` AS `s21`, `cs1`.`s3` AS `s31`, `cs2`.`s1` AS `s12`, `cs2`.`s2` AS `s22`, `cs2`.`s3` AS `s32`, `cs2`.`syear`, `cs2`.`cnt` FROM (SELECT `item`.`i_product_name` AS `product_name`, `item`.`i_item_sk` AS `item_sk`, `store`.`s_store_name` AS `store_name`, `store`.`s_zip` AS `store_zip`, `ad1`.`ca_street_number` AS `b_street_number`, `ad1`.`ca_street_name` AS `b_street_name`, `ad1`.`ca_city` AS `b_city`, `ad1`.`ca_zip` AS `b_zip`, `ad2`.`ca_street_number` AS `c_street_number`, `ad2`.`ca_street_name` AS `c_street_name`, `ad2`.`ca_city` AS `c_city`, `ad2`.`ca_zip` AS `c_zip`, `d1`.`d_year` AS `syear`, count(*) AS `cnt`, sum(`store_sales`.`ss_wholesale_cost`) AS `s1`, sum(`store_sales`.`ss_list_price`) AS `s2`, sum(`store_sales`.`ss_coupon_amt`) AS `s3` FROM `store_sales` JOIN `store_returns` ON ((`store_sales`.`ss_item_sk` = `store_returns`.`sr_item_sk`) AND (`store_sales`.`ss_ticket_number` = `store_returns`.`sr_ticket_number`)) JOIN (SELECT `catalog_sales`.`cs_item_sk` FROM `catalog_sales` JOIN `catalog_returns` ON ((`catalog_sales`.`cs_item_sk` = `catalog_returns`.`cr_item_sk`) AND (`catalog_sales`.`cs_order_number` = `catalog_returns`.`cr_order_number`)) GROUP BY `catalog_sales`.`cs_item_sk` HAVING (sum(`catalog_sales`.`cs_ext_list_price`) > (2 * sum(((`catalog_returns`.`cr_refunded_cash` + `catalog_returns`.`cr_reversed_charge`) + `catalog_returns`.`cr_store_credit`))))) AS `cs_ui` ON (`store_sales`.`ss_item_sk` = `cs_ui`.`cs_item_sk`) JOIN `date_dim` AS `d1` ON (`store_sales`.`ss_sold_date_sk` = `d1`.`d_date_sk`) CROSS JOIN `date_dim` AS `d2` CROSS JOIN `date_dim` AS `d3` JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) JOIN `customer` ON (((`store_sales`.`ss_customer_sk` = `customer`.`c_customer_sk`) AND (`customer`.`c_first_sales_date_sk` = `d2`.`d_date_sk`)) AND (`customer`.`c_first_shipto_date_sk` = `d3`.`d_date_sk`)) JOIN `customer_demographics` AS `cd1` ON (`store_sales`.`ss_cdemo_sk` = `cd1`.`cd_demo_sk`) JOIN `customer_demographics` AS `cd2` ON ((`customer`.`c_current_cdemo_sk` = `cd2`.`cd_demo_sk`) AND (`cd1`.`cd_marital_status` <> `cd2`.`cd_marital_status`)) JOIN `promotion` ON (`store_sales`.`ss_promo_sk` = `promotion`.`p_promo_sk`) JOIN `household_demographics` AS `hd1` ON (`store_sales`.`ss_hdemo_sk` = `hd1`.`hd_demo_sk`) JOIN `household_demographics` AS `hd2` ON (`customer`.`c_current_hdemo_sk` = `hd2`.`hd_demo_sk`) JOIN `customer_address` AS `ad1` ON (`store_sales`.`ss_addr_sk` = `ad1`.`ca_address_sk`) JOIN `customer_address` AS `ad2` ON (`customer`.`c_current_addr_sk` = `ad2`.`ca_address_sk`) JOIN `income_band` AS `ib1` ON (`hd1`.`hd_income_band_sk` = `ib1`.`ib_income_band_sk`) JOIN `income_band` AS `ib2` ON (`hd2`.`hd_income_band_sk` = `ib2`.`ib_income_band_sk`) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (((`item`.`i_current_price` BETWEEN 22 AND (22 + 10)) AND (`item`.`i_current_price` BETWEEN (22 + 1) AND (22 + 15))) AND `item`.`i_color` IN ('light', 'cyan', 'burnished', 'green', 'almond', 'smoke'))) GROUP BY `item`.`i_product_name`, `item`.`i_item_sk`, `store`.`s_store_name`, `store`.`s_zip`, `ad1`.`ca_street_number`, `ad1`.`ca_street_name`, `ad1`.`ca_city`, `ad1`.`ca_zip`, `ad2`.`ca_street_number`, `ad2`.`ca_street_name`, `ad2`.`ca_city`, `ad2`.`ca_zip`, `d1`.`d_year`, `d2`.`d_year`, `d3`.`d_year`) AS `cs1` JOIN (SELECT `item`.`i_item_sk` AS `item_sk`, `store`.`s_store_name` AS `store_name`, `store`.`s_zip` AS `store_zip`, `d1`.`d_year` AS `syear`, count(*) AS `cnt`, sum(`store_sales`.`ss_wholesale_cost`) AS `s1`, sum(`store_sales`.`ss_list_price`) AS `s2`, sum(`store_sales`.`ss_coupon_amt`) AS `s3` FROM `store_sales` JOIN `store_returns` ON ((`store_sales`.`ss_item_sk` = `store_returns`.`sr_item_sk`) AND (`store_sales`.`ss_ticket_number` = `store_returns`.`sr_ticket_number`)) JOIN (SELECT `catalog_sales`.`cs_item_sk` FROM `catalog_sales` JOIN `catalog_returns` ON ((`catalog_sales`.`cs_item_sk` = `catalog_returns`.`cr_item_sk`) AND (`catalog_sales`.`cs_order_number` = `catalog_returns`.`cr_order_number`)) GROUP BY `catalog_sales`.`cs_item_sk` HAVING (sum(`catalog_sales`.`cs_ext_list_price`) > (2 * sum(((`catalog_returns`.`cr_refunded_cash` + `catalog_returns`.`cr_reversed_charge`) + `catalog_returns`.`cr_store_credit`))))) AS `cs_ui` ON (`store_sales`.`ss_item_sk` = `cs_ui`.`cs_item_sk`) JOIN `date_dim` AS `d1` ON (`store_sales`.`ss_sold_date_sk` = `d1`.`d_date_sk`) CROSS JOIN `date_dim` AS `d2` CROSS JOIN `date_dim` AS `d3` JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) JOIN `customer` ON (((`store_sales`.`ss_customer_sk` = `customer`.`c_customer_sk`) AND (`customer`.`c_first_sales_date_sk` = `d2`.`d_date_sk`)) AND (`customer`.`c_first_shipto_date_sk` = `d3`.`d_date_sk`)) JOIN `customer_demographics` AS `cd1` ON (`store_sales`.`ss_cdemo_sk` = `cd1`.`cd_demo_sk`) JOIN `customer_demographics` AS `cd2` ON ((`customer`.`c_current_cdemo_sk` = `cd2`.`cd_demo_sk`) AND (`cd1`.`cd_marital_status` <> `cd2`.`cd_marital_status`)) JOIN `promotion` ON (`store_sales`.`ss_promo_sk` = `promotion`.`p_promo_sk`) JOIN `household_demographics` AS `hd1` ON (`store_sales`.`ss_hdemo_sk` = `hd1`.`hd_demo_sk`) JOIN `household_demographics` AS `hd2` ON (`customer`.`c_current_hdemo_sk` = `hd2`.`hd_demo_sk`) JOIN `customer_address` AS `ad1` ON (`store_sales`.`ss_addr_sk` = `ad1`.`ca_address_sk`) JOIN `customer_address` AS `ad2` ON (`customer`.`c_current_addr_sk` = `ad2`.`ca_address_sk`) JOIN `income_band` AS `ib1` ON (`hd1`.`hd_income_band_sk` = `ib1`.`ib_income_band_sk`) JOIN `income_band` AS `ib2` ON (`hd2`.`hd_income_band_sk` = `ib2`.`ib_income_band_sk`) JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND (((`item`.`i_current_price` BETWEEN 22 AND (22 + 10)) AND (`item`.`i_current_price` BETWEEN (22 + 1) AND (22 + 15))) AND `item`.`i_color` IN ('light', 'cyan', 'burnished', 'green', 'almond', 'smoke'))) GROUP BY `item`.`i_product_name`, `item`.`i_item_sk`, `store`.`s_store_name`, `store`.`s_zip`, `ad1`.`ca_street_number`, `ad1`.`ca_street_name`, `ad1`.`ca_city`, `ad1`.`ca_zip`, `ad2`.`ca_street_number`, `ad2`.`ca_street_name`, `ad2`.`ca_city`, `ad2`.`ca_zip`, `d1`.`d_year`, `d2`.`d_year`, `d3`.`d_year`) AS `cs2` ON ((((`cs1`.`item_sk` = `cs2`.`item_sk`) AND (`cs2`.`cnt` <= `cs1`.`cnt`)) AND (`cs1`.`store_name` = `cs2`.`store_name`)) AND (`cs1`.`store_zip` = `cs2`.`store_zip`)) WHERE (`cs1`.`syear` = 2001) AND (`cs2`.`syear` = (2001 + 1)) AND (`cs2`.`syear` = (2001 + 1)) ORDER BY `cs1`.`product_name` ASC NULLS LAST, `cs1`.`store_name` ASC NULLS LAST, `cs2`.`cnt` ASC NULLS LAST, `cs1`.`s1` ASC NULLS LAST, `cs2`.`s1` ASC NULLS LAST | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q65_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q65_explain.snap new file mode 100644 index 0000000000..fe6bcd1861 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q65_explain.snap @@ -0,0 +1,39 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q65" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: store.s_store_name ASC NULLS LAST, item.i_item_desc ASC NULLS LAST | +| | Projection: store.s_store_name, item.i_item_desc, sc.revenue, item.i_current_price, item.i_wholesale_cost, item.i_brand | +| | Inner Join: Filter: sb.ss_store_sk = sc.ss_store_sk AND sc.revenue <= Float64(0.1) * sb.ave AND store.s_store_sk = sc.ss_store_sk AND item.i_item_sk = sc.ss_item_sk | +| | Cross Join: | +| | Cross Join: | +| | TableScan: store projection=[s_store_sk, s_store_name] | +| | TableScan: item projection=[i_item_sk, i_item_desc, i_current_price, i_wholesale_cost, i_brand] | +| | SubqueryAlias: sb | +| | Projection: sa.ss_store_sk, avg(sa.revenue) AS ave | +| | Aggregate: groupBy=[[sa.ss_store_sk]], aggr=[[avg(sa.revenue)]] | +| | SubqueryAlias: sa | +| | Projection: store_sales.ss_store_sk, sum(store_sales.ss_sales_price) AS revenue | +| | Aggregate: groupBy=[[store_sales.ss_store_sk, store_sales.ss_item_sk]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1186) AND Int64(1186) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| | SubqueryAlias: sc | +| | Projection: store_sales.ss_store_sk, store_sales.ss_item_sk, sum(store_sales.ss_sales_price) AS revenue | +| | Aggregate: groupBy=[[store_sales.ss_store_sk, store_sales.ss_item_sk]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1186) AND Int64(1186) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT store.s_store_name, item.i_item_desc, sc.revenue, item.i_current_price, item.i_wholesale_cost, item.i_brand FROM store CROSS JOIN item CROSS JOIN (SELECT sa.ss_store_sk, avg(sa.revenue) AS ave FROM (SELECT store_sales.ss_store_sk, sum(store_sales.ss_sales_price) AS revenue FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_month_seq BETWEEN 1186 AND (1186 + 11))) GROUP BY store_sales.ss_store_sk, store_sales.ss_item_sk) AS sa GROUP BY sa.ss_store_sk) AS sb JOIN (SELECT store_sales.ss_store_sk, store_sales.ss_item_sk, sum(store_sales.ss_sales_price) AS revenue FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_month_seq BETWEEN 1186 AND (1186 + 11))) GROUP BY store_sales.ss_store_sk, store_sales.ss_item_sk) AS sc ON ((((sb.ss_store_sk = sc.ss_store_sk) AND (sc.revenue <= (0.1 * sb.ave))) AND (store.s_store_sk = sc.ss_store_sk)) AND (item.i_item_sk = sc.ss_item_sk)) ORDER BY store.s_store_name ASC NULLS LAST, item.i_item_desc ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `store`.`s_store_name`, `item`.`i_item_desc`, `sc`.`revenue`, `item`.`i_current_price`, `item`.`i_wholesale_cost`, `item`.`i_brand` FROM `store` CROSS JOIN `item` CROSS JOIN (SELECT `sa`.`ss_store_sk`, avg(`sa`.`revenue`) AS `ave` FROM (SELECT `store_sales`.`ss_store_sk`, sum(`store_sales`.`ss_sales_price`) AS `revenue` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_month_seq` BETWEEN 1186 AND (1186 + 11))) GROUP BY `store_sales`.`ss_store_sk`, `store_sales`.`ss_item_sk`) AS `sa` GROUP BY `sa`.`ss_store_sk`) AS `sb` JOIN (SELECT `store_sales`.`ss_store_sk`, `store_sales`.`ss_item_sk`, sum(`store_sales`.`ss_sales_price`) AS `revenue` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_month_seq` BETWEEN 1186 AND (1186 + 11))) GROUP BY `store_sales`.`ss_store_sk`, `store_sales`.`ss_item_sk`) AS `sc` ON ((((`sb`.`ss_store_sk` = `sc`.`ss_store_sk`) AND (`sc`.`revenue` <= (0.1 * `sb`.`ave`))) AND (`store`.`s_store_sk` = `sc`.`ss_store_sk`)) AND (`item`.`i_item_sk` = `sc`.`ss_item_sk`)) ORDER BY `store`.`s_store_name` ASC NULLS LAST, `item`.`i_item_desc` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q66_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q66_explain.snap new file mode 100644 index 0000000000..32a4f670b5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q66_explain.snap @@ -0,0 +1,44 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q66" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: x.w_warehouse_name ASC NULLS LAST | +| | Projection: x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year, sum(x.jan_sales) AS jan_sales, sum(x.feb_sales) AS feb_sales, sum(x.mar_sales) AS mar_sales, sum(x.apr_sales) AS apr_sales, sum(x.may_sales) AS may_sales, sum(x.jun_sales) AS jun_sales, sum(x.jul_sales) AS jul_sales, sum(x.aug_sales) AS aug_sales, sum(x.sep_sales) AS sep_sales, sum(x.oct_sales) AS oct_sales, sum(x.nov_sales) AS nov_sales, sum(x.dec_sales) AS dec_sales, sum(x.jan_sales / x.w_warehouse_sq_ft) AS jan_sales_per_sq_foot, sum(x.feb_sales / x.w_warehouse_sq_ft) AS feb_sales_per_sq_foot, sum(x.mar_sales / x.w_warehouse_sq_ft) AS mar_sales_per_sq_foot, sum(x.apr_sales / x.w_warehouse_sq_ft) AS apr_sales_per_sq_foot, sum(x.may_sales / x.w_warehouse_sq_ft) AS may_sales_per_sq_foot, sum(x.jun_sales / x.w_warehouse_sq_ft) AS jun_sales_per_sq_foot, sum(x.jul_sales / x.w_warehouse_sq_ft) AS jul_sales_per_sq_foot, sum(x.aug_sales / x.w_warehouse_sq_ft) AS aug_sales_per_sq_foot, sum(x.sep_sales / x.w_warehouse_sq_ft) AS sep_sales_per_sq_foot, sum(x.oct_sales / x.w_warehouse_sq_ft) AS oct_sales_per_sq_foot, sum(x.nov_sales / x.w_warehouse_sq_ft) AS nov_sales_per_sq_foot, sum(x.dec_sales / x.w_warehouse_sq_ft) AS dec_sales_per_sq_foot, sum(x.jan_net) AS jan_net, sum(x.feb_net) AS feb_net, sum(x.mar_net) AS mar_net, sum(x.apr_net) AS apr_net, sum(x.may_net) AS may_net, sum(x.jun_net) AS jun_net, sum(x.jul_net) AS jul_net, sum(x.aug_net) AS aug_net, sum(x.sep_net) AS sep_net, sum(x.oct_net) AS oct_net, sum(x.nov_net) AS nov_net, sum(x.dec_net) AS dec_net | +| | Aggregate: groupBy=[[x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year]], aggr=[[sum(x.jan_sales), sum(x.feb_sales), sum(x.mar_sales), sum(x.apr_sales), sum(x.may_sales), sum(x.jun_sales), sum(x.jul_sales), sum(x.aug_sales), sum(x.sep_sales), sum(x.oct_sales), sum(x.nov_sales), sum(x.dec_sales), sum(x.jan_sales / x.w_warehouse_sq_ft), sum(x.feb_sales / x.w_warehouse_sq_ft), sum(x.mar_sales / x.w_warehouse_sq_ft), sum(x.apr_sales / x.w_warehouse_sq_ft), sum(x.may_sales / x.w_warehouse_sq_ft), sum(x.jun_sales / x.w_warehouse_sq_ft), sum(x.jul_sales / x.w_warehouse_sq_ft), sum(x.aug_sales / x.w_warehouse_sq_ft), sum(x.sep_sales / x.w_warehouse_sq_ft), sum(x.oct_sales / x.w_warehouse_sq_ft), sum(x.nov_sales / x.w_warehouse_sq_ft), sum(x.dec_sales / x.w_warehouse_sq_ft), sum(x.jan_net), sum(x.feb_net), sum(x.mar_net), sum(x.apr_net), sum(x.may_net), sum(x.jun_net), sum(x.jul_net), sum(x.aug_net), sum(x.sep_net), sum(x.oct_net), sum(x.nov_net), sum(x.dec_net)]] | +| | SubqueryAlias: x | +| | Union | +| | Projection: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, Utf8("FEDEX") || Utf8(",") || Utf8("GERMA") AS ship_carriers, date_dim.d_year AS year, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS dec_net | +| | Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year]], aggr=[[sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)]] | +| | Inner Join: Filter: web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Inner Join: Filter: web_sales.ws_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_sold_time_sk, ws_ship_mode_sk, ws_warehouse_sk, ws_quantity, ws_ext_list_price, ws_net_profit] | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2001)] | +| | Filter: time_dim.t_time BETWEEN Int64(19072) AND Int64(19072) + Int64(28800) | +| | TableScan: time_dim projection=[t_time_sk, t_time] | +| | TableScan: ship_mode projection=[sm_ship_mode_sk], full_filters=[ship_mode.sm_carrier IN ([Utf8("FEDEX"), Utf8("GERMA")])] | +| | Projection: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, Utf8("FEDEX") || Utf8(",") || Utf8("GERMA") AS ship_carriers, date_dim.d_year AS year, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS dec_net | +| | Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year]], aggr=[[sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)]] | +| | Inner Join: Filter: catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_sold_time_sk, cs_ship_mode_sk, cs_warehouse_sk, cs_quantity, cs_sales_price, cs_net_paid] | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int64(2001)] | +| | Filter: time_dim.t_time BETWEEN Int64(19072) AND Int64(19072) + Int64(28800) | +| | TableScan: time_dim projection=[t_time_sk, t_time] | +| | TableScan: ship_mode projection=[sm_ship_mode_sk], full_filters=[ship_mode.sm_carrier IN ([Utf8("FEDEX"), Utf8("GERMA")])] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x."year", sum(x.jan_sales) AS jan_sales, sum(x.feb_sales) AS feb_sales, sum(x.mar_sales) AS mar_sales, sum(x.apr_sales) AS apr_sales, sum(x.may_sales) AS may_sales, sum(x.jun_sales) AS jun_sales, sum(x.jul_sales) AS jul_sales, sum(x.aug_sales) AS aug_sales, sum(x.sep_sales) AS sep_sales, sum(x.oct_sales) AS oct_sales, sum(x.nov_sales) AS nov_sales, sum(x.dec_sales) AS dec_sales, sum((x.jan_sales / x.w_warehouse_sq_ft)) AS jan_sales_per_sq_foot, sum((x.feb_sales / x.w_warehouse_sq_ft)) AS feb_sales_per_sq_foot, sum((x.mar_sales / x.w_warehouse_sq_ft)) AS mar_sales_per_sq_foot, sum((x.apr_sales / x.w_warehouse_sq_ft)) AS apr_sales_per_sq_foot, sum((x.may_sales / x.w_warehouse_sq_ft)) AS may_sales_per_sq_foot, sum((x.jun_sales / x.w_warehouse_sq_ft)) AS jun_sales_per_sq_foot, sum((x.jul_sales / x.w_warehouse_sq_ft)) AS jul_sales_per_sq_foot, sum((x.aug_sales / x.w_warehouse_sq_ft)) AS aug_sales_per_sq_foot, sum((x.sep_sales / x.w_warehouse_sq_ft)) AS sep_sales_per_sq_foot, sum((x.oct_sales / x.w_warehouse_sq_ft)) AS oct_sales_per_sq_foot, sum((x.nov_sales / x.w_warehouse_sq_ft)) AS nov_sales_per_sq_foot, sum((x.dec_sales / x.w_warehouse_sq_ft)) AS dec_sales_per_sq_foot, sum(x.jan_net) AS jan_net, sum(x.feb_net) AS feb_net, sum(x.mar_net) AS mar_net, sum(x.apr_net) AS apr_net, sum(x.may_net) AS may_net, sum(x.jun_net) AS jun_net, sum(x.jul_net) AS jul_net, sum(x.aug_net) AS aug_net, sum(x.sep_net) AS sep_net, sum(x.oct_net) AS oct_net, sum(x.nov_net) AS nov_net, sum(x.dec_net) AS dec_net FROM (SELECT "warehouse".w_warehouse_name, "warehouse".w_warehouse_sq_ft, "warehouse".w_city, "warehouse".w_county, "warehouse".w_state, "warehouse".w_country, (('FEDEX' || ',') || 'GERMA') AS ship_carriers, date_dim.d_year AS "year", sum(CASE WHEN (date_dim.d_moy = 1) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS jan_sales, sum(CASE WHEN (date_dim.d_moy = 2) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS feb_sales, sum(CASE WHEN (date_dim.d_moy = 3) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS mar_sales, sum(CASE WHEN (date_dim.d_moy = 4) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS apr_sales, sum(CASE WHEN (date_dim.d_moy = 5) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS may_sales, sum(CASE WHEN (date_dim.d_moy = 6) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS jun_sales, sum(CASE WHEN (date_dim.d_moy = 7) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS jul_sales, sum(CASE WHEN (date_dim.d_moy = 8) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS aug_sales, sum(CASE WHEN (date_dim.d_moy = 9) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS sep_sales, sum(CASE WHEN (date_dim.d_moy = 10) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS oct_sales, sum(CASE WHEN (date_dim.d_moy = 11) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS nov_sales, sum(CASE WHEN (date_dim.d_moy = 12) THEN (web_sales.ws_ext_list_price * web_sales.ws_quantity) ELSE 0 END) AS dec_sales, sum(CASE WHEN (date_dim.d_moy = 1) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS jan_net, sum(CASE WHEN (date_dim.d_moy = 2) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS feb_net, sum(CASE WHEN (date_dim.d_moy = 3) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS mar_net, sum(CASE WHEN (date_dim.d_moy = 4) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS apr_net, sum(CASE WHEN (date_dim.d_moy = 5) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS may_net, sum(CASE WHEN (date_dim.d_moy = 6) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS jun_net, sum(CASE WHEN (date_dim.d_moy = 7) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS jul_net, sum(CASE WHEN (date_dim.d_moy = 8) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS aug_net, sum(CASE WHEN (date_dim.d_moy = 9) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS sep_net, sum(CASE WHEN (date_dim.d_moy = 10) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS oct_net, sum(CASE WHEN (date_dim.d_moy = 11) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS nov_net, sum(CASE WHEN (date_dim.d_moy = 12) THEN (web_sales.ws_net_profit * web_sales.ws_quantity) ELSE 0 END) AS dec_net FROM web_sales JOIN "warehouse" ON (web_sales.ws_warehouse_sk = "warehouse".w_warehouse_sk) JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2001)) JOIN time_dim ON ((web_sales.ws_sold_time_sk = time_dim.t_time_sk) AND (time_dim.t_time BETWEEN 19072 AND (19072 + 28800))) JOIN ship_mode ON ((web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk) AND ship_mode.sm_carrier IN ('FEDEX', 'GERMA')) GROUP BY "warehouse".w_warehouse_name, "warehouse".w_warehouse_sq_ft, "warehouse".w_city, "warehouse".w_county, "warehouse".w_state, "warehouse".w_country, date_dim.d_year UNION ALL SELECT "warehouse".w_warehouse_name, "warehouse".w_warehouse_sq_ft, "warehouse".w_city, "warehouse".w_county, "warehouse".w_state, "warehouse".w_country, (('FEDEX' || ',') || 'GERMA') AS ship_carriers, date_dim.d_year AS "year", sum(CASE WHEN (date_dim.d_moy = 1) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS jan_sales, sum(CASE WHEN (date_dim.d_moy = 2) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS feb_sales, sum(CASE WHEN (date_dim.d_moy = 3) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS mar_sales, sum(CASE WHEN (date_dim.d_moy = 4) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS apr_sales, sum(CASE WHEN (date_dim.d_moy = 5) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS may_sales, sum(CASE WHEN (date_dim.d_moy = 6) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS jun_sales, sum(CASE WHEN (date_dim.d_moy = 7) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS jul_sales, sum(CASE WHEN (date_dim.d_moy = 8) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS aug_sales, sum(CASE WHEN (date_dim.d_moy = 9) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS sep_sales, sum(CASE WHEN (date_dim.d_moy = 10) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS oct_sales, sum(CASE WHEN (date_dim.d_moy = 11) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS nov_sales, sum(CASE WHEN (date_dim.d_moy = 12) THEN (catalog_sales.cs_sales_price * catalog_sales.cs_quantity) ELSE 0 END) AS dec_sales, sum(CASE WHEN (date_dim.d_moy = 1) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS jan_net, sum(CASE WHEN (date_dim.d_moy = 2) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS feb_net, sum(CASE WHEN (date_dim.d_moy = 3) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS mar_net, sum(CASE WHEN (date_dim.d_moy = 4) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS apr_net, sum(CASE WHEN (date_dim.d_moy = 5) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS may_net, sum(CASE WHEN (date_dim.d_moy = 6) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS jun_net, sum(CASE WHEN (date_dim.d_moy = 7) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS jul_net, sum(CASE WHEN (date_dim.d_moy = 8) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS aug_net, sum(CASE WHEN (date_dim.d_moy = 9) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS sep_net, sum(CASE WHEN (date_dim.d_moy = 10) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS oct_net, sum(CASE WHEN (date_dim.d_moy = 11) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS nov_net, sum(CASE WHEN (date_dim.d_moy = 12) THEN (catalog_sales.cs_net_paid * catalog_sales.cs_quantity) ELSE 0 END) AS dec_net FROM catalog_sales JOIN "warehouse" ON (catalog_sales.cs_warehouse_sk = "warehouse".w_warehouse_sk) JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2001)) JOIN time_dim ON ((catalog_sales.cs_sold_time_sk = time_dim.t_time_sk) AND (time_dim.t_time BETWEEN 19072 AND (19072 + 28800))) JOIN ship_mode ON ((catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk) AND ship_mode.sm_carrier IN ('FEDEX', 'GERMA')) GROUP BY "warehouse".w_warehouse_name, "warehouse".w_warehouse_sq_ft, "warehouse".w_city, "warehouse".w_county, "warehouse".w_state, "warehouse".w_country, date_dim.d_year) AS x GROUP BY x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x."year" ORDER BY x.w_warehouse_name ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `x`.`w_warehouse_name`, `x`.`w_warehouse_sq_ft`, `x`.`w_city`, `x`.`w_county`, `x`.`w_state`, `x`.`w_country`, `x`.`ship_carriers`, `x`.`year`, sum(`x`.`jan_sales`) AS `jan_sales`, sum(`x`.`feb_sales`) AS `feb_sales`, sum(`x`.`mar_sales`) AS `mar_sales`, sum(`x`.`apr_sales`) AS `apr_sales`, sum(`x`.`may_sales`) AS `may_sales`, sum(`x`.`jun_sales`) AS `jun_sales`, sum(`x`.`jul_sales`) AS `jul_sales`, sum(`x`.`aug_sales`) AS `aug_sales`, sum(`x`.`sep_sales`) AS `sep_sales`, sum(`x`.`oct_sales`) AS `oct_sales`, sum(`x`.`nov_sales`) AS `nov_sales`, sum(`x`.`dec_sales`) AS `dec_sales`, sum((`x`.`jan_sales` / `x`.`w_warehouse_sq_ft`)) AS `jan_sales_per_sq_foot`, sum((`x`.`feb_sales` / `x`.`w_warehouse_sq_ft`)) AS `feb_sales_per_sq_foot`, sum((`x`.`mar_sales` / `x`.`w_warehouse_sq_ft`)) AS `mar_sales_per_sq_foot`, sum((`x`.`apr_sales` / `x`.`w_warehouse_sq_ft`)) AS `apr_sales_per_sq_foot`, sum((`x`.`may_sales` / `x`.`w_warehouse_sq_ft`)) AS `may_sales_per_sq_foot`, sum((`x`.`jun_sales` / `x`.`w_warehouse_sq_ft`)) AS `jun_sales_per_sq_foot`, sum((`x`.`jul_sales` / `x`.`w_warehouse_sq_ft`)) AS `jul_sales_per_sq_foot`, sum((`x`.`aug_sales` / `x`.`w_warehouse_sq_ft`)) AS `aug_sales_per_sq_foot`, sum((`x`.`sep_sales` / `x`.`w_warehouse_sq_ft`)) AS `sep_sales_per_sq_foot`, sum((`x`.`oct_sales` / `x`.`w_warehouse_sq_ft`)) AS `oct_sales_per_sq_foot`, sum((`x`.`nov_sales` / `x`.`w_warehouse_sq_ft`)) AS `nov_sales_per_sq_foot`, sum((`x`.`dec_sales` / `x`.`w_warehouse_sq_ft`)) AS `dec_sales_per_sq_foot`, sum(`x`.`jan_net`) AS `jan_net`, sum(`x`.`feb_net`) AS `feb_net`, sum(`x`.`mar_net`) AS `mar_net`, sum(`x`.`apr_net`) AS `apr_net`, sum(`x`.`may_net`) AS `may_net`, sum(`x`.`jun_net`) AS `jun_net`, sum(`x`.`jul_net`) AS `jul_net`, sum(`x`.`aug_net`) AS `aug_net`, sum(`x`.`sep_net`) AS `sep_net`, sum(`x`.`oct_net`) AS `oct_net`, sum(`x`.`nov_net`) AS `nov_net`, sum(`x`.`dec_net`) AS `dec_net` FROM (SELECT `warehouse`.`w_warehouse_name`, `warehouse`.`w_warehouse_sq_ft`, `warehouse`.`w_city`, `warehouse`.`w_county`, `warehouse`.`w_state`, `warehouse`.`w_country`, (('FEDEX' || ',') || 'GERMA') AS `ship_carriers`, `date_dim`.`d_year` AS `year`, sum(CASE WHEN (`date_dim`.`d_moy` = 1) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `jan_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 2) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `feb_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 3) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `mar_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 4) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `apr_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 5) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `may_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 6) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `jun_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 7) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `jul_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 8) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `aug_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 9) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `sep_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 10) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `oct_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 11) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `nov_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 12) THEN (`web_sales`.`ws_ext_list_price` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `dec_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 1) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `jan_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 2) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `feb_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 3) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `mar_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 4) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `apr_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 5) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `may_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 6) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `jun_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 7) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `jul_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 8) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `aug_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 9) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `sep_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 10) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `oct_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 11) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `nov_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 12) THEN (`web_sales`.`ws_net_profit` * `web_sales`.`ws_quantity`) ELSE 0 END) AS `dec_net` FROM `web_sales` JOIN `warehouse` ON (`web_sales`.`ws_warehouse_sk` = `warehouse`.`w_warehouse_sk`) JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2001)) JOIN `time_dim` ON ((`web_sales`.`ws_sold_time_sk` = `time_dim`.`t_time_sk`) AND (`time_dim`.`t_time` BETWEEN 19072 AND (19072 + 28800))) JOIN `ship_mode` ON ((`web_sales`.`ws_ship_mode_sk` = `ship_mode`.`sm_ship_mode_sk`) AND `ship_mode`.`sm_carrier` IN ('FEDEX', 'GERMA')) GROUP BY `warehouse`.`w_warehouse_name`, `warehouse`.`w_warehouse_sq_ft`, `warehouse`.`w_city`, `warehouse`.`w_county`, `warehouse`.`w_state`, `warehouse`.`w_country`, `date_dim`.`d_year` UNION ALL SELECT `warehouse`.`w_warehouse_name`, `warehouse`.`w_warehouse_sq_ft`, `warehouse`.`w_city`, `warehouse`.`w_county`, `warehouse`.`w_state`, `warehouse`.`w_country`, (('FEDEX' || ',') || 'GERMA') AS `ship_carriers`, `date_dim`.`d_year` AS `year`, sum(CASE WHEN (`date_dim`.`d_moy` = 1) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `jan_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 2) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `feb_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 3) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `mar_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 4) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `apr_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 5) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `may_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 6) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `jun_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 7) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `jul_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 8) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `aug_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 9) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `sep_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 10) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `oct_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 11) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `nov_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 12) THEN (`catalog_sales`.`cs_sales_price` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `dec_sales`, sum(CASE WHEN (`date_dim`.`d_moy` = 1) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `jan_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 2) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `feb_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 3) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `mar_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 4) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `apr_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 5) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `may_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 6) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `jun_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 7) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `jul_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 8) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `aug_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 9) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `sep_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 10) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `oct_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 11) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `nov_net`, sum(CASE WHEN (`date_dim`.`d_moy` = 12) THEN (`catalog_sales`.`cs_net_paid` * `catalog_sales`.`cs_quantity`) ELSE 0 END) AS `dec_net` FROM `catalog_sales` JOIN `warehouse` ON (`catalog_sales`.`cs_warehouse_sk` = `warehouse`.`w_warehouse_sk`) JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2001)) JOIN `time_dim` ON ((`catalog_sales`.`cs_sold_time_sk` = `time_dim`.`t_time_sk`) AND (`time_dim`.`t_time` BETWEEN 19072 AND (19072 + 28800))) JOIN `ship_mode` ON ((`catalog_sales`.`cs_ship_mode_sk` = `ship_mode`.`sm_ship_mode_sk`) AND `ship_mode`.`sm_carrier` IN ('FEDEX', 'GERMA')) GROUP BY `warehouse`.`w_warehouse_name`, `warehouse`.`w_warehouse_sq_ft`, `warehouse`.`w_city`, `warehouse`.`w_county`, `warehouse`.`w_state`, `warehouse`.`w_country`, `date_dim`.`d_year`) AS `x` GROUP BY `x`.`w_warehouse_name`, `x`.`w_warehouse_sq_ft`, `x`.`w_city`, `x`.`w_county`, `x`.`w_state`, `x`.`w_country`, `x`.`ship_carriers`, `x`.`year` ORDER BY `x`.`w_warehouse_name` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q68_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q68_explain.snap new file mode 100644 index 0000000000..794e8e0c82 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q68_explain.snap @@ -0,0 +1,35 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q68" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer.c_last_name ASC NULLS LAST, dn.ss_ticket_number ASC NULLS LAST | +| | Projection: customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.extended_price, dn.extended_tax, dn.list_price | +| | Inner Join: Filter: customer.c_current_addr_sk = current_addr.ca_address_sk AND current_addr.ca_city != dn.bought_city | +| | Inner Join: Filter: dn.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: dn | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_ext_sales_price) AS extended_price, sum(store_sales.ss_ext_list_price) AS list_price, sum(store_sales.ss_ext_tax) AS extended_tax | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city]], aggr=[[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_ext_list_price), sum(store_sales.ss_ext_tax)]] | +| | Inner Join: Filter: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_ext_sales_price, ss_ext_list_price, ss_ext_tax] | +| | Filter: date_dim.d_dom BETWEEN Int64(1) AND Int64(2) | +| | TableScan: date_dim projection=[d_date_sk, d_dom], full_filters=[date_dim.d_year IN ([Int64(2000), Int64(2000) + Int64(1), Int64(2000) + Int64(2)])] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_city IN ([Utf8("Midway"), Utf8("Fairview")])] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(8) OR household_demographics.hd_vehicle_count = Int64(3)] | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | SubqueryAlias: current_addr | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.extended_price, dn.extended_tax, dn.list_price FROM (SELECT store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_ext_sales_price) AS extended_price, sum(store_sales.ss_ext_list_price) AS list_price, sum(store_sales.ss_ext_tax) AS extended_tax FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_dom BETWEEN 1 AND 2) AND date_dim.d_year IN (2000, (2000 + 1), (2000 + 2)))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND store.s_city IN ('Midway', 'Fairview')) JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((household_demographics.hd_dep_count = 8) OR (household_demographics.hd_vehicle_count = 3))) JOIN customer_address ON (store_sales.ss_addr_sk = customer_address.ca_address_sk) GROUP BY store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city) AS dn JOIN customer ON (dn.ss_customer_sk = customer.c_customer_sk) JOIN customer_address AS current_addr ON ((customer.c_current_addr_sk = current_addr.ca_address_sk) AND (current_addr.ca_city <> dn.bought_city)) ORDER BY customer.c_last_name ASC NULLS LAST, dn.ss_ticket_number ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer`.`c_last_name`, `customer`.`c_first_name`, `current_addr`.`ca_city`, `dn`.`bought_city`, `dn`.`ss_ticket_number`, `dn`.`extended_price`, `dn`.`extended_tax`, `dn`.`list_price` FROM (SELECT `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, `customer_address`.`ca_city` AS `bought_city`, sum(`store_sales`.`ss_ext_sales_price`) AS `extended_price`, sum(`store_sales`.`ss_ext_list_price`) AS `list_price`, sum(`store_sales`.`ss_ext_tax`) AS `extended_tax` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_dom` BETWEEN 1 AND 2) AND `date_dim`.`d_year` IN (2000, (2000 + 1), (2000 + 2)))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND `store`.`s_city` IN ('Midway', 'Fairview')) JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((`household_demographics`.`hd_dep_count` = 8) OR (`household_demographics`.`hd_vehicle_count` = 3))) JOIN `customer_address` ON (`store_sales`.`ss_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, `store_sales`.`ss_addr_sk`, `customer_address`.`ca_city`) AS `dn` JOIN `customer` ON (`dn`.`ss_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` AS `current_addr` ON ((`customer`.`c_current_addr_sk` = `current_addr`.`ca_address_sk`) AND (`current_addr`.`ca_city` <> `dn`.`bought_city`)) ORDER BY `customer`.`c_last_name` ASC NULLS LAST, `dn`.`ss_ticket_number` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q69_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q69_explain.snap new file mode 100644 index 0000000000..80792201f2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q69_explain.snap @@ -0,0 +1,45 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q69" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST | +| | Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(*) AS cnt2, customer_demographics.cd_credit_rating, count(*) AS cnt3 | +| | Aggregate: groupBy=[[customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating]], aggr=[[count(*)]] | +| | Inner Join: Filter: customer_demographics.cd_demo_sk = c.c_current_cdemo_sk | +| | Inner Join: Filter: c.c_current_addr_sk = ca.ca_address_sk | +| | Filter: EXISTS () AND NOT EXISTS () AND NOT EXISTS () | +| | Subquery: | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_sold_time_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, store_sales.ss_ext_tax, store_sales.ss_coupon_amt, store_sales.ss_net_paid, store_sales.ss_net_paid_inc_tax, store_sales.ss_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year | +| | Filter: outer_ref(c.c_customer_sk) = store_sales.ss_customer_sk AND store_sales.ss_sold_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(2002) AND date_dim.d_moy BETWEEN Int64(2) AND Int64(2) + Int64(2) | +| | Cross Join: | +| | TableScan: store_sales | +| | TableScan: date_dim | +| | Subquery: | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_sold_time_sk, web_sales.ws_ship_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_bill_cdemo_sk, web_sales.ws_bill_hdemo_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ship_customer_sk, web_sales.ws_ship_cdemo_sk, web_sales.ws_ship_hdemo_sk, web_sales.ws_ship_addr_sk, web_sales.ws_web_page_sk, web_sales.ws_web_site_sk, web_sales.ws_ship_mode_sk, web_sales.ws_warehouse_sk, web_sales.ws_promo_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_list_price, web_sales.ws_sales_price, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, web_sales.ws_ext_tax, web_sales.ws_coupon_amt, web_sales.ws_ext_ship_cost, web_sales.ws_net_paid, web_sales.ws_net_paid_inc_tax, web_sales.ws_net_paid_inc_ship, web_sales.ws_net_paid_inc_ship_tax, web_sales.ws_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year | +| | Filter: outer_ref(c.c_customer_sk) = web_sales.ws_bill_customer_sk AND web_sales.ws_sold_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(2002) AND date_dim.d_moy BETWEEN Int64(2) AND Int64(2) + Int64(2) | +| | Cross Join: | +| | TableScan: web_sales | +| | TableScan: date_dim | +| | Subquery: | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_bill_addr_sk, catalog_sales.cs_ship_customer_sk, catalog_sales.cs_ship_cdemo_sk, catalog_sales.cs_ship_hdemo_sk, catalog_sales.cs_ship_addr_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_catalog_page_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_warehouse_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, catalog_sales.cs_ext_tax, catalog_sales.cs_coupon_amt, catalog_sales.cs_ext_ship_cost, catalog_sales.cs_net_paid, catalog_sales.cs_net_paid_inc_tax, catalog_sales.cs_net_paid_inc_ship, catalog_sales.cs_net_paid_inc_ship_tax, catalog_sales.cs_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year | +| | Filter: outer_ref(c.c_customer_sk) = catalog_sales.cs_ship_customer_sk AND catalog_sales.cs_sold_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(2002) AND date_dim.d_moy BETWEEN Int64(2) AND Int64(2) + Int64(2) | +| | Cross Join: | +| | TableScan: catalog_sales | +| | TableScan: date_dim | +| | SubqueryAlias: c | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | Filter: ca.ca_state IN ([Utf8("IN"), Utf8("VA"), Utf8("MS")]) | +| | SubqueryAlias: ca | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(*) AS cnt2, customer_demographics.cd_credit_rating, count(*) AS cnt3 FROM customer AS c JOIN customer_address AS ca ON ((c.c_current_addr_sk = ca.ca_address_sk) AND (((EXISTS (SELECT store_sales.ss_sold_date_sk, store_sales.ss_sold_time_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, store_sales.ss_ext_tax, store_sales.ss_coupon_amt, store_sales.ss_net_paid, store_sales.ss_net_paid_inc_tax, store_sales.ss_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year FROM store_sales CROSS JOIN date_dim WHERE ((((c.c_customer_sk = store_sales.ss_customer_sk) AND (store_sales.ss_sold_date_sk = date_dim.d_date_sk)) AND (date_dim.d_year = 2002)) AND (date_dim.d_moy BETWEEN 2 AND (2 + 2)))) AND NOT EXISTS (SELECT web_sales.ws_sold_date_sk, web_sales.ws_sold_time_sk, web_sales.ws_ship_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_bill_cdemo_sk, web_sales.ws_bill_hdemo_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ship_customer_sk, web_sales.ws_ship_cdemo_sk, web_sales.ws_ship_hdemo_sk, web_sales.ws_ship_addr_sk, web_sales.ws_web_page_sk, web_sales.ws_web_site_sk, web_sales.ws_ship_mode_sk, web_sales.ws_warehouse_sk, web_sales.ws_promo_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_list_price, web_sales.ws_sales_price, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, web_sales.ws_ext_tax, web_sales.ws_coupon_amt, web_sales.ws_ext_ship_cost, web_sales.ws_net_paid, web_sales.ws_net_paid_inc_tax, web_sales.ws_net_paid_inc_ship, web_sales.ws_net_paid_inc_ship_tax, web_sales.ws_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year FROM web_sales CROSS JOIN date_dim WHERE ((((c.c_customer_sk = web_sales.ws_bill_customer_sk) AND (web_sales.ws_sold_date_sk = date_dim.d_date_sk)) AND (date_dim.d_year = 2002)) AND (date_dim.d_moy BETWEEN 2 AND (2 + 2))))) AND NOT EXISTS (SELECT catalog_sales.cs_sold_date_sk, catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_bill_addr_sk, catalog_sales.cs_ship_customer_sk, catalog_sales.cs_ship_cdemo_sk, catalog_sales.cs_ship_hdemo_sk, catalog_sales.cs_ship_addr_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_catalog_page_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_warehouse_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, catalog_sales.cs_ext_tax, catalog_sales.cs_coupon_amt, catalog_sales.cs_ext_ship_cost, catalog_sales.cs_net_paid, catalog_sales.cs_net_paid_inc_tax, catalog_sales.cs_net_paid_inc_ship, catalog_sales.cs_net_paid_inc_ship_tax, catalog_sales.cs_net_profit, date_dim.d_date_sk, date_dim.d_date_id, date_dim.d_date, date_dim.d_month_seq, date_dim.d_week_seq, date_dim.d_quarter_seq, date_dim.d_year, date_dim.d_dow, date_dim.d_moy, date_dim.d_dom, date_dim.d_qoy, date_dim.d_fy_year, date_dim.d_fy_quarter_seq, date_dim.d_fy_week_seq, date_dim.d_day_name, date_dim.d_quarter_name, date_dim.d_holiday, date_dim.d_weekend, date_dim.d_following_holiday, date_dim.d_first_dom, date_dim.d_last_dom, date_dim.d_same_day_ly, date_dim.d_same_day_lq, date_dim.d_current_day, date_dim.d_current_week, date_dim.d_current_month, date_dim.d_current_quarter, date_dim.d_current_year FROM catalog_sales CROSS JOIN date_dim WHERE ((((c.c_customer_sk = catalog_sales.cs_ship_customer_sk) AND (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) AND (date_dim.d_year = 2002)) AND (date_dim.d_moy BETWEEN 2 AND (2 + 2))))) AND ca.ca_state IN ('IN', 'VA', 'MS'))) JOIN customer_demographics ON (customer_demographics.cd_demo_sk = c.c_current_cdemo_sk) GROUP BY customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating ORDER BY customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer_demographics`.`cd_gender`, `customer_demographics`.`cd_marital_status`, `customer_demographics`.`cd_education_status`, count(*) AS `cnt1`, `customer_demographics`.`cd_purchase_estimate`, count(*) AS `cnt2`, `customer_demographics`.`cd_credit_rating`, count(*) AS `cnt3` FROM `customer` AS `c` JOIN `customer_address` AS `ca` ON ((`c`.`c_current_addr_sk` = `ca`.`ca_address_sk`) AND (((EXISTS (SELECT `store_sales`.`ss_sold_date_sk`, `store_sales`.`ss_sold_time_sk`, `store_sales`.`ss_item_sk`, `store_sales`.`ss_customer_sk`, `store_sales`.`ss_cdemo_sk`, `store_sales`.`ss_hdemo_sk`, `store_sales`.`ss_addr_sk`, `store_sales`.`ss_store_sk`, `store_sales`.`ss_promo_sk`, `store_sales`.`ss_ticket_number`, `store_sales`.`ss_quantity`, `store_sales`.`ss_wholesale_cost`, `store_sales`.`ss_list_price`, `store_sales`.`ss_sales_price`, `store_sales`.`ss_ext_discount_amt`, `store_sales`.`ss_ext_sales_price`, `store_sales`.`ss_ext_wholesale_cost`, `store_sales`.`ss_ext_list_price`, `store_sales`.`ss_ext_tax`, `store_sales`.`ss_coupon_amt`, `store_sales`.`ss_net_paid`, `store_sales`.`ss_net_paid_inc_tax`, `store_sales`.`ss_net_profit`, `date_dim`.`d_date_sk`, `date_dim`.`d_date_id`, `date_dim`.`d_date`, `date_dim`.`d_month_seq`, `date_dim`.`d_week_seq`, `date_dim`.`d_quarter_seq`, `date_dim`.`d_year`, `date_dim`.`d_dow`, `date_dim`.`d_moy`, `date_dim`.`d_dom`, `date_dim`.`d_qoy`, `date_dim`.`d_fy_year`, `date_dim`.`d_fy_quarter_seq`, `date_dim`.`d_fy_week_seq`, `date_dim`.`d_day_name`, `date_dim`.`d_quarter_name`, `date_dim`.`d_holiday`, `date_dim`.`d_weekend`, `date_dim`.`d_following_holiday`, `date_dim`.`d_first_dom`, `date_dim`.`d_last_dom`, `date_dim`.`d_same_day_ly`, `date_dim`.`d_same_day_lq`, `date_dim`.`d_current_day`, `date_dim`.`d_current_week`, `date_dim`.`d_current_month`, `date_dim`.`d_current_quarter`, `date_dim`.`d_current_year` FROM `store_sales` CROSS JOIN `date_dim` WHERE ((((`c`.`c_customer_sk` = `store_sales`.`ss_customer_sk`) AND (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`)) AND (`date_dim`.`d_year` = 2002)) AND (`date_dim`.`d_moy` BETWEEN 2 AND (2 + 2)))) AND NOT EXISTS (SELECT `web_sales`.`ws_sold_date_sk`, `web_sales`.`ws_sold_time_sk`, `web_sales`.`ws_ship_date_sk`, `web_sales`.`ws_item_sk`, `web_sales`.`ws_bill_customer_sk`, `web_sales`.`ws_bill_cdemo_sk`, `web_sales`.`ws_bill_hdemo_sk`, `web_sales`.`ws_bill_addr_sk`, `web_sales`.`ws_ship_customer_sk`, `web_sales`.`ws_ship_cdemo_sk`, `web_sales`.`ws_ship_hdemo_sk`, `web_sales`.`ws_ship_addr_sk`, `web_sales`.`ws_web_page_sk`, `web_sales`.`ws_web_site_sk`, `web_sales`.`ws_ship_mode_sk`, `web_sales`.`ws_warehouse_sk`, `web_sales`.`ws_promo_sk`, `web_sales`.`ws_order_number`, `web_sales`.`ws_quantity`, `web_sales`.`ws_wholesale_cost`, `web_sales`.`ws_list_price`, `web_sales`.`ws_sales_price`, `web_sales`.`ws_ext_discount_amt`, `web_sales`.`ws_ext_sales_price`, `web_sales`.`ws_ext_wholesale_cost`, `web_sales`.`ws_ext_list_price`, `web_sales`.`ws_ext_tax`, `web_sales`.`ws_coupon_amt`, `web_sales`.`ws_ext_ship_cost`, `web_sales`.`ws_net_paid`, `web_sales`.`ws_net_paid_inc_tax`, `web_sales`.`ws_net_paid_inc_ship`, `web_sales`.`ws_net_paid_inc_ship_tax`, `web_sales`.`ws_net_profit`, `date_dim`.`d_date_sk`, `date_dim`.`d_date_id`, `date_dim`.`d_date`, `date_dim`.`d_month_seq`, `date_dim`.`d_week_seq`, `date_dim`.`d_quarter_seq`, `date_dim`.`d_year`, `date_dim`.`d_dow`, `date_dim`.`d_moy`, `date_dim`.`d_dom`, `date_dim`.`d_qoy`, `date_dim`.`d_fy_year`, `date_dim`.`d_fy_quarter_seq`, `date_dim`.`d_fy_week_seq`, `date_dim`.`d_day_name`, `date_dim`.`d_quarter_name`, `date_dim`.`d_holiday`, `date_dim`.`d_weekend`, `date_dim`.`d_following_holiday`, `date_dim`.`d_first_dom`, `date_dim`.`d_last_dom`, `date_dim`.`d_same_day_ly`, `date_dim`.`d_same_day_lq`, `date_dim`.`d_current_day`, `date_dim`.`d_current_week`, `date_dim`.`d_current_month`, `date_dim`.`d_current_quarter`, `date_dim`.`d_current_year` FROM `web_sales` CROSS JOIN `date_dim` WHERE ((((`c`.`c_customer_sk` = `web_sales`.`ws_bill_customer_sk`) AND (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`)) AND (`date_dim`.`d_year` = 2002)) AND (`date_dim`.`d_moy` BETWEEN 2 AND (2 + 2))))) AND NOT EXISTS (SELECT `catalog_sales`.`cs_sold_date_sk`, `catalog_sales`.`cs_sold_time_sk`, `catalog_sales`.`cs_ship_date_sk`, `catalog_sales`.`cs_bill_customer_sk`, `catalog_sales`.`cs_bill_cdemo_sk`, `catalog_sales`.`cs_bill_hdemo_sk`, `catalog_sales`.`cs_bill_addr_sk`, `catalog_sales`.`cs_ship_customer_sk`, `catalog_sales`.`cs_ship_cdemo_sk`, `catalog_sales`.`cs_ship_hdemo_sk`, `catalog_sales`.`cs_ship_addr_sk`, `catalog_sales`.`cs_call_center_sk`, `catalog_sales`.`cs_catalog_page_sk`, `catalog_sales`.`cs_ship_mode_sk`, `catalog_sales`.`cs_warehouse_sk`, `catalog_sales`.`cs_item_sk`, `catalog_sales`.`cs_promo_sk`, `catalog_sales`.`cs_order_number`, `catalog_sales`.`cs_quantity`, `catalog_sales`.`cs_wholesale_cost`, `catalog_sales`.`cs_list_price`, `catalog_sales`.`cs_sales_price`, `catalog_sales`.`cs_ext_discount_amt`, `catalog_sales`.`cs_ext_sales_price`, `catalog_sales`.`cs_ext_wholesale_cost`, `catalog_sales`.`cs_ext_list_price`, `catalog_sales`.`cs_ext_tax`, `catalog_sales`.`cs_coupon_amt`, `catalog_sales`.`cs_ext_ship_cost`, `catalog_sales`.`cs_net_paid`, `catalog_sales`.`cs_net_paid_inc_tax`, `catalog_sales`.`cs_net_paid_inc_ship`, `catalog_sales`.`cs_net_paid_inc_ship_tax`, `catalog_sales`.`cs_net_profit`, `date_dim`.`d_date_sk`, `date_dim`.`d_date_id`, `date_dim`.`d_date`, `date_dim`.`d_month_seq`, `date_dim`.`d_week_seq`, `date_dim`.`d_quarter_seq`, `date_dim`.`d_year`, `date_dim`.`d_dow`, `date_dim`.`d_moy`, `date_dim`.`d_dom`, `date_dim`.`d_qoy`, `date_dim`.`d_fy_year`, `date_dim`.`d_fy_quarter_seq`, `date_dim`.`d_fy_week_seq`, `date_dim`.`d_day_name`, `date_dim`.`d_quarter_name`, `date_dim`.`d_holiday`, `date_dim`.`d_weekend`, `date_dim`.`d_following_holiday`, `date_dim`.`d_first_dom`, `date_dim`.`d_last_dom`, `date_dim`.`d_same_day_ly`, `date_dim`.`d_same_day_lq`, `date_dim`.`d_current_day`, `date_dim`.`d_current_week`, `date_dim`.`d_current_month`, `date_dim`.`d_current_quarter`, `date_dim`.`d_current_year` FROM `catalog_sales` CROSS JOIN `date_dim` WHERE ((((`c`.`c_customer_sk` = `catalog_sales`.`cs_ship_customer_sk`) AND (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`)) AND (`date_dim`.`d_year` = 2002)) AND (`date_dim`.`d_moy` BETWEEN 2 AND (2 + 2))))) AND `ca`.`ca_state` IN ('IN', 'VA', 'MS'))) JOIN `customer_demographics` ON (`customer_demographics`.`cd_demo_sk` = `c`.`c_current_cdemo_sk`) GROUP BY `customer_demographics`.`cd_gender`, `customer_demographics`.`cd_marital_status`, `customer_demographics`.`cd_education_status`, `customer_demographics`.`cd_purchase_estimate`, `customer_demographics`.`cd_credit_rating` ORDER BY `customer_demographics`.`cd_gender` ASC NULLS LAST, `customer_demographics`.`cd_marital_status` ASC NULLS LAST, `customer_demographics`.`cd_education_status` ASC NULLS LAST, `customer_demographics`.`cd_purchase_estimate` ASC NULLS LAST, `customer_demographics`.`cd_credit_rating` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q6_explain.snap new file mode 100644 index 0000000000..218148a5aa --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q6_explain.snap @@ -0,0 +1,47 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q6" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: state, cnt | +| | Sort: cnt ASC NULLS LAST, a.ca_state ASC NULLS LAST | +| | Projection: a.ca_state AS state, count(*) AS cnt, a.ca_state | +| | Filter: count(*) >= Int64(10) | +| | Aggregate: groupBy=[[a.ca_state]], aggr=[[count(*)]] | +| | Inner Join: Filter: s.ss_item_sk = i.i_item_sk | +| | Inner Join: Filter: s.ss_sold_date_sk = d.d_date_sk | +| | Inner Join: Filter: c.c_customer_sk = s.ss_customer_sk | +| | Inner Join: Filter: a.ca_address_sk = c.c_current_addr_sk | +| | SubqueryAlias: a | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | SubqueryAlias: c | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | SubqueryAlias: s | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] | +| | Filter: d.d_month_seq = () | +| | Subquery: | +| | Distinct: | +| | Projection: date_dim.d_month_seq | +| | Filter: date_dim.d_year = Int64(1998) AND date_dim.d_moy = Int64(3) | +| | TableScan: date_dim | +| | SubqueryAlias: d | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| | Filter: i.i_current_price > Float64(1.2) * () | +| | Subquery: | +| | Projection: avg(j.i_current_price) | +| | Aggregate: groupBy=[[]], aggr=[[avg(j.i_current_price)]] | +| | Filter: j.i_category = outer_ref(i.i_category) | +| | SubqueryAlias: j | +| | TableScan: item | +| | SubqueryAlias: i | +| | TableScan: item projection=[i_item_sk, i_current_price, i_category] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT a.ca_state AS state, count(*) AS cnt FROM customer_address AS a JOIN customer AS c ON (a.ca_address_sk = c.c_current_addr_sk) JOIN store_sales AS s ON (c.c_customer_sk = s.ss_customer_sk) JOIN date_dim AS d ON ((s.ss_sold_date_sk = d.d_date_sk) AND (d.d_month_seq = (SELECT DISTINCT date_dim.d_month_seq FROM date_dim WHERE ((date_dim.d_year = 1998) AND (date_dim.d_moy = 3))))) JOIN item AS i ON ((s.ss_item_sk = i.i_item_sk) AND (i.i_current_price > (1.2 * (SELECT avg(j.i_current_price) FROM item AS j WHERE (j.i_category = i.i_category))))) GROUP BY a.ca_state HAVING (count(*) >= 10) ORDER BY cnt ASC NULLS LAST, a.ca_state ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `a`.`ca_state` AS `state`, count(*) AS `cnt` FROM `customer_address` AS `a` JOIN `customer` AS `c` ON (`a`.`ca_address_sk` = `c`.`c_current_addr_sk`) JOIN `store_sales` AS `s` ON (`c`.`c_customer_sk` = `s`.`ss_customer_sk`) JOIN `date_dim` AS `d` ON ((`s`.`ss_sold_date_sk` = `d`.`d_date_sk`) AND (`d`.`d_month_seq` = (SELECT DISTINCT `date_dim`.`d_month_seq` FROM `date_dim` WHERE ((`date_dim`.`d_year` = 1998) AND (`date_dim`.`d_moy` = 3))))) JOIN `item` AS `i` ON ((`s`.`ss_item_sk` = `i`.`i_item_sk`) AND (`i`.`i_current_price` > (1.2 * (SELECT avg(`j`.`i_current_price`) FROM `item` AS `j` WHERE (`j`.`i_category` = `i`.`i_category`))))) GROUP BY `a`.`ca_state` HAVING (count(*) >= 10) ORDER BY `cnt` ASC NULLS LAST, `a`.`ca_state` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q71_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q71_explain.snap new file mode 100644 index 0000000000..74f45abadf --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q71_explain.snap @@ -0,0 +1,37 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q71" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: brand_id, brand, time_dim.t_hour, time_dim.t_minute, ext_price | +| | Sort: ext_price DESC NULLS FIRST, item.i_brand_id ASC NULLS LAST | +| | Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, time_dim.t_hour, time_dim.t_minute, sum(tmp.ext_price) AS ext_price, item.i_brand_id | +| | Aggregate: groupBy=[[item.i_brand, item.i_brand_id, time_dim.t_hour, time_dim.t_minute]], aggr=[[sum(tmp.ext_price)]] | +| | Inner Join: Filter: tmp.time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: tmp.sold_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manager_id = Int64(1)] | +| | SubqueryAlias: tmp | +| | Union | +| | Union | +| | Projection: web_sales.ws_ext_sales_price AS ext_price, web_sales.ws_item_sk AS sold_item_sk, web_sales.ws_sold_time_sk AS time_sk | +| | Inner Join: Filter: date_dim.d_date_sk = web_sales.ws_sold_date_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_sold_time_sk, ws_item_sk, ws_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(2001)] | +| | Projection: catalog_sales.cs_ext_sales_price AS ext_price, catalog_sales.cs_item_sk AS sold_item_sk, catalog_sales.cs_sold_time_sk AS time_sk | +| | Inner Join: Filter: date_dim.d_date_sk = catalog_sales.cs_sold_date_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_sold_time_sk, cs_item_sk, cs_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(2001)] | +| | Projection: store_sales.ss_ext_sales_price AS ext_price, store_sales.ss_item_sk AS sold_item_sk, store_sales.ss_sold_time_sk AS time_sk | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_sold_time_sk, ss_item_sk, ss_ext_sales_price] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int64(11), date_dim.d_year = Int64(2001)] | +| | TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], full_filters=[time_dim.t_meal_time = Utf8("breakfast") OR time_dim.t_meal_time = Utf8("dinner")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_brand_id AS brand_id, item.i_brand AS brand, time_dim.t_hour, time_dim.t_minute, sum(tmp.ext_price) AS ext_price FROM item JOIN (SELECT web_sales.ws_ext_sales_price AS ext_price, web_sales.ws_item_sk AS sold_item_sk, web_sales.ws_sold_time_sk AS time_sk FROM web_sales JOIN date_dim ON ((date_dim.d_date_sk = web_sales.ws_sold_date_sk) AND ((date_dim.d_moy = 11) AND (date_dim.d_year = 2001))) UNION ALL SELECT catalog_sales.cs_ext_sales_price AS ext_price, catalog_sales.cs_item_sk AS sold_item_sk, catalog_sales.cs_sold_time_sk AS time_sk FROM catalog_sales JOIN date_dim ON ((date_dim.d_date_sk = catalog_sales.cs_sold_date_sk) AND ((date_dim.d_moy = 11) AND (date_dim.d_year = 2001))) UNION ALL SELECT store_sales.ss_ext_sales_price AS ext_price, store_sales.ss_item_sk AS sold_item_sk, store_sales.ss_sold_time_sk AS time_sk FROM store_sales JOIN date_dim ON ((date_dim.d_date_sk = store_sales.ss_sold_date_sk) AND ((date_dim.d_moy = 11) AND (date_dim.d_year = 2001)))) AS tmp ON ((tmp.sold_item_sk = item.i_item_sk) AND (item.i_manager_id = 1)) JOIN time_dim ON ((tmp.time_sk = time_dim.t_time_sk) AND ((time_dim.t_meal_time = 'breakfast') OR (time_dim.t_meal_time = 'dinner'))) GROUP BY item.i_brand, item.i_brand_id, time_dim.t_hour, time_dim.t_minute ORDER BY ext_price DESC NULLS FIRST, item.i_brand_id ASC NULLS LAST rewritten_sql=SELECT `item`.`i_brand_id` AS `brand_id`, `item`.`i_brand` AS `brand`, `time_dim`.`t_hour`, `time_dim`.`t_minute`, sum(`tmp`.`ext_price`) AS `ext_price` FROM `item` JOIN (SELECT `web_sales`.`ws_ext_sales_price` AS `ext_price`, `web_sales`.`ws_item_sk` AS `sold_item_sk`, `web_sales`.`ws_sold_time_sk` AS `time_sk` FROM `web_sales` JOIN `date_dim` ON ((`date_dim`.`d_date_sk` = `web_sales`.`ws_sold_date_sk`) AND ((`date_dim`.`d_moy` = 11) AND (`date_dim`.`d_year` = 2001))) UNION ALL SELECT `catalog_sales`.`cs_ext_sales_price` AS `ext_price`, `catalog_sales`.`cs_item_sk` AS `sold_item_sk`, `catalog_sales`.`cs_sold_time_sk` AS `time_sk` FROM `catalog_sales` JOIN `date_dim` ON ((`date_dim`.`d_date_sk` = `catalog_sales`.`cs_sold_date_sk`) AND ((`date_dim`.`d_moy` = 11) AND (`date_dim`.`d_year` = 2001))) UNION ALL SELECT `store_sales`.`ss_ext_sales_price` AS `ext_price`, `store_sales`.`ss_item_sk` AS `sold_item_sk`, `store_sales`.`ss_sold_time_sk` AS `time_sk` FROM `store_sales` JOIN `date_dim` ON ((`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) AND ((`date_dim`.`d_moy` = 11) AND (`date_dim`.`d_year` = 2001)))) AS `tmp` ON ((`tmp`.`sold_item_sk` = `item`.`i_item_sk`) AND (`item`.`i_manager_id` = 1)) JOIN `time_dim` ON ((`tmp`.`time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_meal_time` = 'breakfast') OR (`time_dim`.`t_meal_time` = 'dinner'))) GROUP BY `item`.`i_brand`, `item`.`i_brand_id`, `time_dim`.`t_hour`, `time_dim`.`t_minute` ORDER BY `ext_price` DESC NULLS FIRST, `item`.`i_brand_id` ASC NULLS LAST | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q72_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q72_explain.snap new file mode 100644 index 0000000000..c5d49bf5bd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q72_explain.snap @@ -0,0 +1,43 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q72" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: total_cnt DESC NULLS FIRST, item.i_item_desc ASC NULLS LAST, warehouse.w_warehouse_name ASC NULLS LAST, d1.d_week_seq ASC NULLS LAST | +| | Projection: item.i_item_desc, warehouse.w_warehouse_name, d1.d_week_seq, sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END) AS no_promo, sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS promo, count(*) AS total_cnt | +| | Aggregate: groupBy=[[item.i_item_desc, warehouse.w_warehouse_name, d1.d_week_seq]], aggr=[[sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), count(*)]] | +| | Left Join: Filter: catalog_returns.cr_item_sk = catalog_sales.cs_item_sk AND catalog_returns.cr_order_number = catalog_sales.cs_order_number | +| | Left Join: Filter: catalog_sales.cs_promo_sk = promotion.p_promo_sk | +| | Inner Join: Filter: d3.d_date > d1.d_date + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 5, nanoseconds: 0 }") AND catalog_sales.cs_ship_date_sk = d3.d_date_sk | +| | Inner Join: Filter: d1.d_week_seq = d2.d_week_seq AND inventory.inv_date_sk = d2.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = d1.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_bill_hdemo_sk = household_demographics.hd_demo_sk | +| | Inner Join: Filter: catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk | +| | Inner Join: Filter: item.i_item_sk = catalog_sales.cs_item_sk | +| | Inner Join: Filter: warehouse.w_warehouse_sk = inventory.inv_warehouse_sk | +| | Inner Join: Filter: inventory.inv_quantity_on_hand < catalog_sales.cs_quantity AND catalog_sales.cs_item_sk = inventory.inv_item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_date_sk, cs_bill_cdemo_sk, cs_bill_hdemo_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_quantity] | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | TableScan: item projection=[i_item_sk, i_item_desc] | +| | TableScan: customer_demographics projection=[cd_demo_sk], full_filters=[customer_demographics.cd_marital_status = Utf8("S")] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_buy_potential = Utf8("501-1000")] | +| | Filter: d1.d_year = Int64(1999) | +| | SubqueryAlias: d1 | +| | TableScan: date_dim projection=[d_date_sk, d_date, d_week_seq, d_year] | +| | SubqueryAlias: d2 | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq] | +| | SubqueryAlias: d3 | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | TableScan: promotion projection=[p_promo_sk] | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_desc, "warehouse".w_warehouse_name, d1.d_week_seq, sum(CASE WHEN promotion.p_promo_sk IS NULL THEN 1 ELSE 0 END) AS no_promo, sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN 1 ELSE 0 END) AS promo, count(*) AS total_cnt FROM catalog_sales JOIN inventory ON ((inventory.inv_quantity_on_hand < catalog_sales.cs_quantity) AND (catalog_sales.cs_item_sk = inventory.inv_item_sk)) JOIN "warehouse" ON ("warehouse".w_warehouse_sk = inventory.inv_warehouse_sk) JOIN item ON (item.i_item_sk = catalog_sales.cs_item_sk) JOIN customer_demographics ON ((catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk) AND (customer_demographics.cd_marital_status = 'S')) JOIN household_demographics ON ((catalog_sales.cs_bill_hdemo_sk = household_demographics.hd_demo_sk) AND (household_demographics.hd_buy_potential = '501-1000')) JOIN date_dim AS d1 ON ((catalog_sales.cs_sold_date_sk = d1.d_date_sk) AND (d1.d_year = 1999)) JOIN date_dim AS d2 ON ((d1.d_week_seq = d2.d_week_seq) AND (inventory.inv_date_sk = d2.d_date_sk)) JOIN date_dim AS d3 ON ((d3.d_date > (d1.d_date + INTERVAL '5 DAYS')) AND (catalog_sales.cs_ship_date_sk = d3.d_date_sk)) LEFT JOIN promotion ON (catalog_sales.cs_promo_sk = promotion.p_promo_sk) LEFT JOIN catalog_returns ON ((catalog_returns.cr_item_sk = catalog_sales.cs_item_sk) AND (catalog_returns.cr_order_number = catalog_sales.cs_order_number)) GROUP BY item.i_item_desc, "warehouse".w_warehouse_name, d1.d_week_seq ORDER BY total_cnt DESC NULLS FIRST, item.i_item_desc ASC NULLS LAST, "warehouse".w_warehouse_name ASC NULLS LAST, d1.d_week_seq ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_desc`, `warehouse`.`w_warehouse_name`, `d1`.`d_week_seq`, sum(CASE WHEN `promotion`.`p_promo_sk` IS NULL THEN 1 ELSE 0 END) AS `no_promo`, sum(CASE WHEN `promotion`.`p_promo_sk` IS NOT NULL THEN 1 ELSE 0 END) AS `promo`, count(*) AS `total_cnt` FROM `catalog_sales` JOIN `inventory` ON ((`inventory`.`inv_quantity_on_hand` < `catalog_sales`.`cs_quantity`) AND (`catalog_sales`.`cs_item_sk` = `inventory`.`inv_item_sk`)) JOIN `warehouse` ON (`warehouse`.`w_warehouse_sk` = `inventory`.`inv_warehouse_sk`) JOIN `item` ON (`item`.`i_item_sk` = `catalog_sales`.`cs_item_sk`) JOIN `customer_demographics` ON ((`catalog_sales`.`cs_bill_cdemo_sk` = `customer_demographics`.`cd_demo_sk`) AND (`customer_demographics`.`cd_marital_status` = 'S')) JOIN `household_demographics` ON ((`catalog_sales`.`cs_bill_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (`household_demographics`.`hd_buy_potential` = '501-1000')) JOIN `date_dim` AS `d1` ON ((`catalog_sales`.`cs_sold_date_sk` = `d1`.`d_date_sk`) AND (`d1`.`d_year` = 1999)) JOIN `date_dim` AS `d2` ON ((`d1`.`d_week_seq` = `d2`.`d_week_seq`) AND (`inventory`.`inv_date_sk` = `d2`.`d_date_sk`)) JOIN `date_dim` AS `d3` ON ((`d3`.`d_date` > (CAST(date(`d1`.`d_date`, '+5 days') AS TEXT))) AND (`catalog_sales`.`cs_ship_date_sk` = `d3`.`d_date_sk`)) LEFT JOIN `promotion` ON (`catalog_sales`.`cs_promo_sk` = `promotion`.`p_promo_sk`) LEFT JOIN `catalog_returns` ON ((`catalog_returns`.`cr_item_sk` = `catalog_sales`.`cs_item_sk`) AND (`catalog_returns`.`cr_order_number` = `catalog_sales`.`cs_order_number`)) GROUP BY `item`.`i_item_desc`, `warehouse`.`w_warehouse_name`, `d1`.`d_week_seq` ORDER BY `total_cnt` DESC NULLS FIRST, `item`.`i_item_desc` ASC NULLS LAST, `warehouse`.`w_warehouse_name` ASC NULLS LAST, `d1`.`d_week_seq` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q73_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q73_explain.snap new file mode 100644 index 0000000000..3d2e476fec --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q73_explain.snap @@ -0,0 +1,31 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q73" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: dj.cnt DESC NULLS FIRST, customer.c_last_name ASC NULLS LAST | +| | Projection: customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dj.ss_ticket_number, dj.cnt | +| | Inner Join: Filter: dj.ss_customer_sk = customer.c_customer_sk | +| | Filter: dj.cnt BETWEEN Int64(1) AND Int64(5) | +| | SubqueryAlias: dj | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(*) AS cnt | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] | +| | Filter: date_dim.d_dom BETWEEN Int64(1) AND Int64(2) | +| | TableScan: date_dim projection=[d_date_sk, d_dom], full_filters=[date_dim.d_year IN ([Int64(1999), Int64(1999) + Int64(1), Int64(1999) + Int64(2)])] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_county IN ([Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County"), Utf8("Williamson County")])] | +| | Filter: CASE WHEN household_demographics.hd_vehicle_count > Int64(0) THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE NULL END > Int64(1) | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count, hd_vehicle_count], full_filters=[household_demographics.hd_buy_potential = Utf8("1001-5000") OR household_demographics.hd_buy_potential = Utf8("5001-10000"), household_demographics.hd_vehicle_count > Int64(0)] | +| | TableScan: customer projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dj.ss_ticket_number, dj.cnt FROM (SELECT store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(*) AS cnt FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_dom BETWEEN 1 AND 2) AND date_dim.d_year IN (1999, (1999 + 1), (1999 + 2)))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND store.s_county IN ('Williamson County', 'Williamson County', 'Williamson County', 'Williamson County')) JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND (((CASE WHEN (household_demographics.hd_vehicle_count > 0) THEN (household_demographics.hd_dep_count / household_demographics.hd_vehicle_count) ELSE NULL END > 1) AND ((household_demographics.hd_buy_potential = '1001-5000') OR (household_demographics.hd_buy_potential = '5001-10000'))) AND (household_demographics.hd_vehicle_count > 0))) GROUP BY store_sales.ss_ticket_number, store_sales.ss_customer_sk) AS dj JOIN customer ON (dj.ss_customer_sk = customer.c_customer_sk) WHERE (dj.cnt BETWEEN 1 AND 5) ORDER BY dj.cnt DESC NULLS FIRST, customer.c_last_name ASC NULLS LAST rewritten_sql=SELECT `customer`.`c_last_name`, `customer`.`c_first_name`, `customer`.`c_salutation`, `customer`.`c_preferred_cust_flag`, `dj`.`ss_ticket_number`, `dj`.`cnt` FROM (SELECT `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, count(*) AS `cnt` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_dom` BETWEEN 1 AND 2) AND `date_dim`.`d_year` IN (1999, (1999 + 1), (1999 + 2)))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND `store`.`s_county` IN ('Williamson County', 'Williamson County', 'Williamson County', 'Williamson County')) JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (((CASE WHEN (`household_demographics`.`hd_vehicle_count` > 0) THEN (`household_demographics`.`hd_dep_count` / `household_demographics`.`hd_vehicle_count`) ELSE NULL END > 1) AND ((`household_demographics`.`hd_buy_potential` = '1001-5000') OR (`household_demographics`.`hd_buy_potential` = '5001-10000'))) AND (`household_demographics`.`hd_vehicle_count` > 0))) GROUP BY `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`) AS `dj` JOIN `customer` ON (`dj`.`ss_customer_sk` = `customer`.`c_customer_sk`) WHERE (`dj`.`cnt` BETWEEN 1 AND 5) ORDER BY `dj`.`cnt` DESC NULLS FIRST, `customer`.`c_last_name` ASC NULLS LAST | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q75_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q75_explain.snap new file mode 100644 index 0000000000..fbf47c60c6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q75_explain.snap @@ -0,0 +1,86 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q75" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: sales_cnt_diff ASC NULLS LAST, sales_amt_diff ASC NULLS LAST | +| | Projection: prev_yr.d_year AS prev_year, curr_yr.d_year AS year, curr_yr.i_brand_id, curr_yr.i_class_id, curr_yr.i_category_id, curr_yr.i_manufact_id, prev_yr.sales_cnt AS prev_yr_cnt, curr_yr.sales_cnt AS curr_yr_cnt, curr_yr.sales_cnt - prev_yr.sales_cnt AS sales_cnt_diff, curr_yr.sales_amt - prev_yr.sales_amt AS sales_amt_diff | +| | Inner Join: Filter: curr_yr.i_brand_id = prev_yr.i_brand_id AND curr_yr.i_class_id = prev_yr.i_class_id AND curr_yr.i_category_id = prev_yr.i_category_id AND curr_yr.i_manufact_id = prev_yr.i_manufact_id AND CAST(curr_yr.sales_cnt AS Decimal128(17, 2)) / CAST(prev_yr.sales_cnt AS Decimal128(17, 2)) < Float64(0.9) | +| | Filter: curr_yr.d_year = Int64(2000) | +| | SubqueryAlias: curr_yr | +| | SubqueryAlias: all_sales | +| | Projection: sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt | +| | Aggregate: groupBy=[[sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id]], aggr=[[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)]] | +| | SubqueryAlias: sales_detail | +| | Distinct: | +| | Union | +| | Distinct: | +| | Union | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, catalog_sales.cs_quantity - coalesce(catalog_returns.cr_return_quantity, Int64(0)) AS sales_cnt, catalog_sales.cs_ext_sales_price - coalesce(catalog_returns.cr_return_amount, Float64(0)) AS sales_amt | +| | Left Join: Filter: catalog_sales.cs_order_number = catalog_returns.cr_order_number AND catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = catalog_sales.cs_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = catalog_sales.cs_item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = Utf8("Shoes")] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, store_sales.ss_quantity - coalesce(store_returns.sr_return_quantity, Int64(0)) AS sales_cnt, store_sales.ss_ext_sales_price - coalesce(store_returns.sr_return_amt, Float64(0)) AS sales_amt | +| | Left Join: Filter: store_sales.ss_ticket_number = store_returns.sr_ticket_number AND store_sales.ss_item_sk = store_returns.sr_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = store_sales.ss_item_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = Utf8("Shoes")] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, web_sales.ws_quantity - coalesce(web_returns.wr_return_quantity, Int64(0)) AS sales_cnt, web_sales.ws_ext_sales_price - coalesce(web_returns.wr_return_amt, Float64(0)) AS sales_amt | +| | Left Join: Filter: web_sales.ws_order_number = web_returns.wr_order_number AND web_sales.ws_item_sk = web_returns.wr_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = web_sales.ws_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = web_sales.ws_item_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = Utf8("Shoes")] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| | Filter: prev_yr.d_year = Int64(2000) - Int64(1) | +| | SubqueryAlias: prev_yr | +| | SubqueryAlias: all_sales | +| | Projection: sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt | +| | Aggregate: groupBy=[[sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id]], aggr=[[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)]] | +| | SubqueryAlias: sales_detail | +| | Distinct: | +| | Union | +| | Distinct: | +| | Union | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, catalog_sales.cs_quantity - coalesce(catalog_returns.cr_return_quantity, Int64(0)) AS sales_cnt, catalog_sales.cs_ext_sales_price - coalesce(catalog_returns.cr_return_amount, Float64(0)) AS sales_amt | +| | Left Join: Filter: catalog_sales.cs_order_number = catalog_returns.cr_order_number AND catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = catalog_sales.cs_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = catalog_sales.cs_item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = Utf8("Shoes")] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, store_sales.ss_quantity - coalesce(store_returns.sr_return_quantity, Int64(0)) AS sales_cnt, store_sales.ss_ext_sales_price - coalesce(store_returns.sr_return_amt, Float64(0)) AS sales_amt | +| | Left Join: Filter: store_sales.ss_ticket_number = store_returns.sr_ticket_number AND store_sales.ss_item_sk = store_returns.sr_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = store_sales.ss_item_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = Utf8("Shoes")] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, web_sales.ws_quantity - coalesce(web_returns.wr_return_quantity, Int64(0)) AS sales_cnt, web_sales.ws_ext_sales_price - coalesce(web_returns.wr_return_amt, Float64(0)) AS sales_amt | +| | Left Join: Filter: web_sales.ws_order_number = web_returns.wr_order_number AND web_sales.ws_item_sk = web_returns.wr_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = web_sales.ws_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = web_sales.ws_item_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = Utf8("Shoes")] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT prev_yr.d_year AS prev_year, curr_yr.d_year AS "year", curr_yr.i_brand_id, curr_yr.i_class_id, curr_yr.i_category_id, curr_yr.i_manufact_id, prev_yr.sales_cnt AS prev_yr_cnt, curr_yr.sales_cnt AS curr_yr_cnt, (curr_yr.sales_cnt - prev_yr.sales_cnt) AS sales_cnt_diff, (curr_yr.sales_amt - prev_yr.sales_amt) AS sales_amt_diff FROM (SELECT sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt FROM (SELECT date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, (catalog_sales.cs_quantity - coalesce(catalog_returns.cr_return_quantity, 0)) AS sales_cnt, (catalog_sales.cs_ext_sales_price - coalesce(catalog_returns.cr_return_amount, 0.0)) AS sales_amt FROM catalog_sales JOIN item ON ((item.i_item_sk = catalog_sales.cs_item_sk) AND (item.i_category = 'Shoes')) JOIN date_dim ON (date_dim.d_date_sk = catalog_sales.cs_sold_date_sk) LEFT JOIN catalog_returns ON ((catalog_sales.cs_order_number = catalog_returns.cr_order_number) AND (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) UNION SELECT date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, (store_sales.ss_quantity - coalesce(store_returns.sr_return_quantity, 0)) AS sales_cnt, (store_sales.ss_ext_sales_price - coalesce(store_returns.sr_return_amt, 0.0)) AS sales_amt FROM store_sales JOIN item ON ((item.i_item_sk = store_sales.ss_item_sk) AND (item.i_category = 'Shoes')) JOIN date_dim ON (date_dim.d_date_sk = store_sales.ss_sold_date_sk) LEFT JOIN store_returns ON ((store_sales.ss_ticket_number = store_returns.sr_ticket_number) AND (store_sales.ss_item_sk = store_returns.sr_item_sk)) UNION SELECT date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, (web_sales.ws_quantity - coalesce(web_returns.wr_return_quantity, 0)) AS sales_cnt, (web_sales.ws_ext_sales_price - coalesce(web_returns.wr_return_amt, 0.0)) AS sales_amt FROM web_sales JOIN item ON ((item.i_item_sk = web_sales.ws_item_sk) AND (item.i_category = 'Shoes')) JOIN date_dim ON (date_dim.d_date_sk = web_sales.ws_sold_date_sk) LEFT JOIN web_returns ON ((web_sales.ws_order_number = web_returns.wr_order_number) AND (web_sales.ws_item_sk = web_returns.wr_item_sk))) AS sales_detail GROUP BY sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id) AS curr_yr JOIN (SELECT sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt FROM (SELECT date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, (catalog_sales.cs_quantity - coalesce(catalog_returns.cr_return_quantity, 0)) AS sales_cnt, (catalog_sales.cs_ext_sales_price - coalesce(catalog_returns.cr_return_amount, 0.0)) AS sales_amt FROM catalog_sales JOIN item ON ((item.i_item_sk = catalog_sales.cs_item_sk) AND (item.i_category = 'Shoes')) JOIN date_dim ON (date_dim.d_date_sk = catalog_sales.cs_sold_date_sk) LEFT JOIN catalog_returns ON ((catalog_sales.cs_order_number = catalog_returns.cr_order_number) AND (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) UNION SELECT date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, (store_sales.ss_quantity - coalesce(store_returns.sr_return_quantity, 0)) AS sales_cnt, (store_sales.ss_ext_sales_price - coalesce(store_returns.sr_return_amt, 0.0)) AS sales_amt FROM store_sales JOIN item ON ((item.i_item_sk = store_sales.ss_item_sk) AND (item.i_category = 'Shoes')) JOIN date_dim ON (date_dim.d_date_sk = store_sales.ss_sold_date_sk) LEFT JOIN store_returns ON ((store_sales.ss_ticket_number = store_returns.sr_ticket_number) AND (store_sales.ss_item_sk = store_returns.sr_item_sk)) UNION SELECT date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, (web_sales.ws_quantity - coalesce(web_returns.wr_return_quantity, 0)) AS sales_cnt, (web_sales.ws_ext_sales_price - coalesce(web_returns.wr_return_amt, 0.0)) AS sales_amt FROM web_sales JOIN item ON ((item.i_item_sk = web_sales.ws_item_sk) AND (item.i_category = 'Shoes')) JOIN date_dim ON (date_dim.d_date_sk = web_sales.ws_sold_date_sk) LEFT JOIN web_returns ON ((web_sales.ws_order_number = web_returns.wr_order_number) AND (web_sales.ws_item_sk = web_returns.wr_item_sk))) AS sales_detail GROUP BY sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id) AS prev_yr ON (((((curr_yr.i_brand_id = prev_yr.i_brand_id) AND (curr_yr.i_class_id = prev_yr.i_class_id)) AND (curr_yr.i_category_id = prev_yr.i_category_id)) AND (curr_yr.i_manufact_id = prev_yr.i_manufact_id)) AND ((CAST(curr_yr.sales_cnt AS DECIMAL(17,2)) / CAST(prev_yr.sales_cnt AS DECIMAL(17,2))) < 0.9)) WHERE (curr_yr.d_year = 2000) AND (prev_yr.d_year = (2000 - 1)) AND (prev_yr.d_year = (2000 - 1)) ORDER BY sales_cnt_diff ASC NULLS LAST, sales_amt_diff ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `prev_yr`.`d_year` AS `prev_year`, `curr_yr`.`d_year` AS `year`, `curr_yr`.`i_brand_id`, `curr_yr`.`i_class_id`, `curr_yr`.`i_category_id`, `curr_yr`.`i_manufact_id`, `prev_yr`.`sales_cnt` AS `prev_yr_cnt`, `curr_yr`.`sales_cnt` AS `curr_yr_cnt`, (`curr_yr`.`sales_cnt` - `prev_yr`.`sales_cnt`) AS `sales_cnt_diff`, (`curr_yr`.`sales_amt` - `prev_yr`.`sales_amt`) AS `sales_amt_diff` FROM (SELECT `sales_detail`.`d_year`, `sales_detail`.`i_brand_id`, `sales_detail`.`i_class_id`, `sales_detail`.`i_category_id`, `sales_detail`.`i_manufact_id`, sum(`sales_detail`.`sales_cnt`) AS `sales_cnt`, sum(`sales_detail`.`sales_amt`) AS `sales_amt` FROM (SELECT `date_dim`.`d_year`, `item`.`i_brand_id`, `item`.`i_class_id`, `item`.`i_category_id`, `item`.`i_manufact_id`, (`catalog_sales`.`cs_quantity` - coalesce(`catalog_returns`.`cr_return_quantity`, 0)) AS `sales_cnt`, (`catalog_sales`.`cs_ext_sales_price` - coalesce(`catalog_returns`.`cr_return_amount`, 0.0)) AS `sales_amt` FROM `catalog_sales` JOIN `item` ON ((`item`.`i_item_sk` = `catalog_sales`.`cs_item_sk`) AND (`item`.`i_category` = 'Shoes')) JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `catalog_sales`.`cs_sold_date_sk`) LEFT JOIN `catalog_returns` ON ((`catalog_sales`.`cs_order_number` = `catalog_returns`.`cr_order_number`) AND (`catalog_sales`.`cs_item_sk` = `catalog_returns`.`cr_item_sk`)) UNION SELECT `date_dim`.`d_year`, `item`.`i_brand_id`, `item`.`i_class_id`, `item`.`i_category_id`, `item`.`i_manufact_id`, (`store_sales`.`ss_quantity` - coalesce(`store_returns`.`sr_return_quantity`, 0)) AS `sales_cnt`, (`store_sales`.`ss_ext_sales_price` - coalesce(`store_returns`.`sr_return_amt`, 0.0)) AS `sales_amt` FROM `store_sales` JOIN `item` ON ((`item`.`i_item_sk` = `store_sales`.`ss_item_sk`) AND (`item`.`i_category` = 'Shoes')) JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) LEFT JOIN `store_returns` ON ((`store_sales`.`ss_ticket_number` = `store_returns`.`sr_ticket_number`) AND (`store_sales`.`ss_item_sk` = `store_returns`.`sr_item_sk`)) UNION SELECT `date_dim`.`d_year`, `item`.`i_brand_id`, `item`.`i_class_id`, `item`.`i_category_id`, `item`.`i_manufact_id`, (`web_sales`.`ws_quantity` - coalesce(`web_returns`.`wr_return_quantity`, 0)) AS `sales_cnt`, (`web_sales`.`ws_ext_sales_price` - coalesce(`web_returns`.`wr_return_amt`, 0.0)) AS `sales_amt` FROM `web_sales` JOIN `item` ON ((`item`.`i_item_sk` = `web_sales`.`ws_item_sk`) AND (`item`.`i_category` = 'Shoes')) JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `web_sales`.`ws_sold_date_sk`) LEFT JOIN `web_returns` ON ((`web_sales`.`ws_order_number` = `web_returns`.`wr_order_number`) AND (`web_sales`.`ws_item_sk` = `web_returns`.`wr_item_sk`))) AS `sales_detail` GROUP BY `sales_detail`.`d_year`, `sales_detail`.`i_brand_id`, `sales_detail`.`i_class_id`, `sales_detail`.`i_category_id`, `sales_detail`.`i_manufact_id`) AS `curr_yr` JOIN (SELECT `sales_detail`.`d_year`, `sales_detail`.`i_brand_id`, `sales_detail`.`i_class_id`, `sales_detail`.`i_category_id`, `sales_detail`.`i_manufact_id`, sum(`sales_detail`.`sales_cnt`) AS `sales_cnt`, sum(`sales_detail`.`sales_amt`) AS `sales_amt` FROM (SELECT `date_dim`.`d_year`, `item`.`i_brand_id`, `item`.`i_class_id`, `item`.`i_category_id`, `item`.`i_manufact_id`, (`catalog_sales`.`cs_quantity` - coalesce(`catalog_returns`.`cr_return_quantity`, 0)) AS `sales_cnt`, (`catalog_sales`.`cs_ext_sales_price` - coalesce(`catalog_returns`.`cr_return_amount`, 0.0)) AS `sales_amt` FROM `catalog_sales` JOIN `item` ON ((`item`.`i_item_sk` = `catalog_sales`.`cs_item_sk`) AND (`item`.`i_category` = 'Shoes')) JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `catalog_sales`.`cs_sold_date_sk`) LEFT JOIN `catalog_returns` ON ((`catalog_sales`.`cs_order_number` = `catalog_returns`.`cr_order_number`) AND (`catalog_sales`.`cs_item_sk` = `catalog_returns`.`cr_item_sk`)) UNION SELECT `date_dim`.`d_year`, `item`.`i_brand_id`, `item`.`i_class_id`, `item`.`i_category_id`, `item`.`i_manufact_id`, (`store_sales`.`ss_quantity` - coalesce(`store_returns`.`sr_return_quantity`, 0)) AS `sales_cnt`, (`store_sales`.`ss_ext_sales_price` - coalesce(`store_returns`.`sr_return_amt`, 0.0)) AS `sales_amt` FROM `store_sales` JOIN `item` ON ((`item`.`i_item_sk` = `store_sales`.`ss_item_sk`) AND (`item`.`i_category` = 'Shoes')) JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `store_sales`.`ss_sold_date_sk`) LEFT JOIN `store_returns` ON ((`store_sales`.`ss_ticket_number` = `store_returns`.`sr_ticket_number`) AND (`store_sales`.`ss_item_sk` = `store_returns`.`sr_item_sk`)) UNION SELECT `date_dim`.`d_year`, `item`.`i_brand_id`, `item`.`i_class_id`, `item`.`i_category_id`, `item`.`i_manufact_id`, (`web_sales`.`ws_quantity` - coalesce(`web_returns`.`wr_return_quantity`, 0)) AS `sales_cnt`, (`web_sales`.`ws_ext_sales_price` - coalesce(`web_returns`.`wr_return_amt`, 0.0)) AS `sales_amt` FROM `web_sales` JOIN `item` ON ((`item`.`i_item_sk` = `web_sales`.`ws_item_sk`) AND (`item`.`i_category` = 'Shoes')) JOIN `date_dim` ON (`date_dim`.`d_date_sk` = `web_sales`.`ws_sold_date_sk`) LEFT JOIN `web_returns` ON ((`web_sales`.`ws_order_number` = `web_returns`.`wr_order_number`) AND (`web_sales`.`ws_item_sk` = `web_returns`.`wr_item_sk`))) AS `sales_detail` GROUP BY `sales_detail`.`d_year`, `sales_detail`.`i_brand_id`, `sales_detail`.`i_class_id`, `sales_detail`.`i_category_id`, `sales_detail`.`i_manufact_id`) AS `prev_yr` ON (((((`curr_yr`.`i_brand_id` = `prev_yr`.`i_brand_id`) AND (`curr_yr`.`i_class_id` = `prev_yr`.`i_class_id`)) AND (`curr_yr`.`i_category_id` = `prev_yr`.`i_category_id`)) AND (`curr_yr`.`i_manufact_id` = `prev_yr`.`i_manufact_id`)) AND ((CAST(`curr_yr`.`sales_cnt` AS DECIMAL(17,2)) / CAST(`prev_yr`.`sales_cnt` AS DECIMAL(17,2))) < 0.9)) WHERE (`curr_yr`.`d_year` = 2000) AND (`prev_yr`.`d_year` = (2000 - 1)) AND (`prev_yr`.`d_year` = (2000 - 1)) ORDER BY `sales_cnt_diff` ASC NULLS LAST, `sales_amt_diff` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q76_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q76_explain.snap new file mode 100644 index 0000000000..7c8b10c0a2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q76_explain.snap @@ -0,0 +1,42 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q76" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: foo.channel ASC NULLS LAST, foo.col_name ASC NULLS LAST, foo.d_year ASC NULLS LAST, foo.d_qoy ASC NULLS LAST, foo.i_category ASC NULLS LAST | +| | Projection: foo.channel, foo.col_name, foo.d_year, foo.d_qoy, foo.i_category, count(*) AS sales_cnt, sum(foo.ext_sales_price) AS sales_amt | +| | Aggregate: groupBy=[[foo.channel, foo.col_name, foo.d_year, foo.d_qoy, foo.i_category]], aggr=[[count(*), sum(foo.ext_sales_price)]] | +| | SubqueryAlias: foo | +| | Union | +| | Union | +| | Projection: Utf8("store") AS channel, Utf8("ss_customer_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, store_sales.ss_ext_sales_price AS ext_sales_price | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Filter: store_sales.ss_customer_sk IS NULL | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_category] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | Projection: Utf8("web") AS channel, Utf8("ws_ship_hdemo_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, web_sales.ws_ext_sales_price AS ext_sales_price | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: web_sales.ws_item_sk = item.i_item_sk | +| | Filter: web_sales.ws_ship_hdemo_sk IS NULL | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ship_hdemo_sk, ws_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_category] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | Projection: Utf8("catalog") AS channel, Utf8("cs_bill_customer_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, catalog_sales.cs_ext_sales_price AS ext_sales_price | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_item_sk = item.i_item_sk | +| | Filter: catalog_sales.cs_bill_customer_sk IS NULL | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_category] | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT foo."channel", foo.col_name, foo.d_year, foo.d_qoy, foo.i_category, count(*) AS sales_cnt, sum(foo.ext_sales_price) AS sales_amt FROM (SELECT 'store' AS "channel", 'ss_customer_sk' AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, store_sales.ss_ext_sales_price AS ext_sales_price FROM store_sales JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND store_sales.ss_customer_sk IS NULL) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) UNION ALL SELECT 'web' AS "channel", 'ws_ship_hdemo_sk' AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, web_sales.ws_ext_sales_price AS ext_sales_price FROM web_sales JOIN item ON ((web_sales.ws_item_sk = item.i_item_sk) AND web_sales.ws_ship_hdemo_sk IS NULL) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) UNION ALL SELECT 'catalog' AS "channel", 'cs_bill_customer_sk' AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, catalog_sales.cs_ext_sales_price AS ext_sales_price FROM catalog_sales JOIN item ON ((catalog_sales.cs_item_sk = item.i_item_sk) AND catalog_sales.cs_bill_customer_sk IS NULL) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk)) AS foo GROUP BY foo."channel", foo.col_name, foo.d_year, foo.d_qoy, foo.i_category ORDER BY foo."channel" ASC NULLS LAST, foo.col_name ASC NULLS LAST, foo.d_year ASC NULLS LAST, foo.d_qoy ASC NULLS LAST, foo.i_category ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `foo`.`channel`, `foo`.`col_name`, `foo`.`d_year`, `foo`.`d_qoy`, `foo`.`i_category`, count(*) AS `sales_cnt`, sum(`foo`.`ext_sales_price`) AS `sales_amt` FROM (SELECT 'store' AS `channel`, 'ss_customer_sk' AS `col_name`, `date_dim`.`d_year`, `date_dim`.`d_qoy`, `item`.`i_category`, `store_sales`.`ss_ext_sales_price` AS `ext_sales_price` FROM `store_sales` JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND `store_sales`.`ss_customer_sk` IS NULL) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) UNION ALL SELECT 'web' AS `channel`, 'ws_ship_hdemo_sk' AS `col_name`, `date_dim`.`d_year`, `date_dim`.`d_qoy`, `item`.`i_category`, `web_sales`.`ws_ext_sales_price` AS `ext_sales_price` FROM `web_sales` JOIN `item` ON ((`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) AND `web_sales`.`ws_ship_hdemo_sk` IS NULL) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) UNION ALL SELECT 'catalog' AS `channel`, 'cs_bill_customer_sk' AS `col_name`, `date_dim`.`d_year`, `date_dim`.`d_qoy`, `item`.`i_category`, `catalog_sales`.`cs_ext_sales_price` AS `ext_sales_price` FROM `catalog_sales` JOIN `item` ON ((`catalog_sales`.`cs_item_sk` = `item`.`i_item_sk`) AND `catalog_sales`.`cs_bill_customer_sk` IS NULL) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`)) AS `foo` GROUP BY `foo`.`channel`, `foo`.`col_name`, `foo`.`d_year`, `foo`.`d_qoy`, `foo`.`i_category` ORDER BY `foo`.`channel` ASC NULLS LAST, `foo`.`col_name` ASC NULLS LAST, `foo`.`d_year` ASC NULLS LAST, `foo`.`d_qoy` ASC NULLS LAST, `foo`.`i_category` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q78_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q78_explain.snap new file mode 100644 index 0000000000..37eb517fba --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q78_explain.snap @@ -0,0 +1,49 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q78" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: ss.ss_customer_sk, ratio, store_qty, store_wholesale_cost, store_sales_price, other_chan_qty, other_chan_wholesale_cost, other_chan_sales_price | +| | Sort: ss.ss_customer_sk ASC NULLS LAST, ss.ss_qty DESC NULLS FIRST, ss.ss_wc DESC NULLS FIRST, ss.ss_sp DESC NULLS FIRST, other_chan_qty ASC NULLS LAST, other_chan_wholesale_cost ASC NULLS LAST, other_chan_sales_price ASC NULLS LAST, ratio ASC NULLS LAST | +| | Projection: ss.ss_customer_sk, round(ss.ss_qty / (coalesce(ws.ws_qty, Int64(0)) + coalesce(cs.cs_qty, Int64(0))), Int64(2)) AS ratio, ss.ss_qty AS store_qty, ss.ss_wc AS store_wholesale_cost, ss.ss_sp AS store_sales_price, coalesce(ws.ws_qty, Int64(0)) + coalesce(cs.cs_qty, Int64(0)) AS other_chan_qty, coalesce(ws.ws_wc, Int64(0)) + coalesce(cs.cs_wc, Int64(0)) AS other_chan_wholesale_cost, coalesce(ws.ws_sp, Int64(0)) + coalesce(cs.cs_sp, Int64(0)) AS other_chan_sales_price, ss.ss_qty, ss.ss_wc, ss.ss_sp | +| | Filter: coalesce(ws.ws_qty, Int64(0)) > Int64(0) OR coalesce(cs.cs_qty, Int64(0)) > Int64(0) | +| | Left Join: Filter: cs.cs_sold_year = ss.ss_sold_year AND cs.cs_item_sk = ss.ss_item_sk AND cs.cs_customer_sk = ss.ss_customer_sk | +| | Left Join: Filter: ws.ws_sold_year = ss.ss_sold_year AND ws.ws_item_sk = ss.ss_item_sk AND ws.ws_customer_sk = ss.ss_customer_sk | +| | Filter: ss.ss_sold_year = Int64(2001) | +| | SubqueryAlias: ss | +| | Projection: date_dim.d_year AS ss_sold_year, store_sales.ss_item_sk, store_sales.ss_customer_sk, sum(store_sales.ss_quantity) AS ss_qty, sum(store_sales.ss_wholesale_cost) AS ss_wc, sum(store_sales.ss_sales_price) AS ss_sp | +| | Aggregate: groupBy=[[date_dim.d_year, store_sales.ss_item_sk, store_sales.ss_customer_sk]], aggr=[[sum(store_sales.ss_quantity), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Filter: store_returns.sr_ticket_number IS NULL | +| | Left Join: Filter: store_returns.sr_ticket_number = store_sales.ss_ticket_number AND store_sales.ss_item_sk = store_returns.sr_item_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_wholesale_cost, ss_sales_price] | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: ws | +| | Projection: date_dim.d_year AS ws_sold_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk AS ws_customer_sk, sum(web_sales.ws_quantity) AS ws_qty, sum(web_sales.ws_wholesale_cost) AS ws_wc, sum(web_sales.ws_sales_price) AS ws_sp | +| | Aggregate: groupBy=[[date_dim.d_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk]], aggr=[[sum(web_sales.ws_quantity), sum(web_sales.ws_wholesale_cost), sum(web_sales.ws_sales_price)]] | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Filter: web_returns.wr_order_number IS NULL | +| | Left Join: Filter: web_returns.wr_order_number = web_sales.ws_order_number AND web_sales.ws_item_sk = web_returns.wr_item_sk | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_order_number, ws_quantity, ws_wholesale_cost, ws_sales_price] | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: cs | +| | Projection: date_dim.d_year AS cs_sold_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk AS cs_customer_sk, sum(catalog_sales.cs_quantity) AS cs_qty, sum(catalog_sales.cs_wholesale_cost) AS cs_wc, sum(catalog_sales.cs_sales_price) AS cs_sp | +| | Aggregate: groupBy=[[date_dim.d_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk]], aggr=[[sum(catalog_sales.cs_quantity), sum(catalog_sales.cs_wholesale_cost), sum(catalog_sales.cs_sales_price)]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Filter: catalog_returns.cr_order_number IS NULL | +| | Left Join: Filter: catalog_returns.cr_order_number = catalog_sales.cs_order_number AND catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_order_number, cs_quantity, cs_wholesale_cost, cs_sales_price] | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number] | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT ss.ss_customer_sk, round((ss.ss_qty / (coalesce(ws.ws_qty, 0) + coalesce(cs.cs_qty, 0))), 2) AS ratio, ss.ss_qty AS store_qty, ss.ss_wc AS store_wholesale_cost, ss.ss_sp AS store_sales_price, (coalesce(ws.ws_qty, 0) + coalesce(cs.cs_qty, 0)) AS other_chan_qty, (coalesce(ws.ws_wc, 0) + coalesce(cs.cs_wc, 0)) AS other_chan_wholesale_cost, (coalesce(ws.ws_sp, 0) + coalesce(cs.cs_sp, 0)) AS other_chan_sales_price FROM (SELECT date_dim.d_year AS ss_sold_year, store_sales.ss_item_sk, store_sales.ss_customer_sk, sum(store_sales.ss_quantity) AS ss_qty, sum(store_sales.ss_wholesale_cost) AS ss_wc, sum(store_sales.ss_sales_price) AS ss_sp FROM store_sales LEFT JOIN store_returns ON ((store_returns.sr_ticket_number = store_sales.ss_ticket_number) AND (store_sales.ss_item_sk = store_returns.sr_item_sk)) JOIN date_dim ON (store_sales.ss_sold_date_sk = date_dim.d_date_sk) WHERE store_returns.sr_ticket_number IS NULL GROUP BY date_dim.d_year, store_sales.ss_item_sk, store_sales.ss_customer_sk) AS ss LEFT JOIN (SELECT date_dim.d_year AS ws_sold_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk AS ws_customer_sk, sum(web_sales.ws_quantity) AS ws_qty, sum(web_sales.ws_wholesale_cost) AS ws_wc, sum(web_sales.ws_sales_price) AS ws_sp FROM web_sales LEFT JOIN web_returns ON ((web_returns.wr_order_number = web_sales.ws_order_number) AND (web_sales.ws_item_sk = web_returns.wr_item_sk)) JOIN date_dim ON (web_sales.ws_sold_date_sk = date_dim.d_date_sk) WHERE web_returns.wr_order_number IS NULL GROUP BY date_dim.d_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk) AS ws ON (((ws.ws_sold_year = ss.ss_sold_year) AND (ws.ws_item_sk = ss.ss_item_sk)) AND (ws.ws_customer_sk = ss.ss_customer_sk)) LEFT JOIN (SELECT date_dim.d_year AS cs_sold_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk AS cs_customer_sk, sum(catalog_sales.cs_quantity) AS cs_qty, sum(catalog_sales.cs_wholesale_cost) AS cs_wc, sum(catalog_sales.cs_sales_price) AS cs_sp FROM catalog_sales LEFT JOIN catalog_returns ON ((catalog_returns.cr_order_number = catalog_sales.cs_order_number) AND (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk)) JOIN date_dim ON (catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) WHERE catalog_returns.cr_order_number IS NULL GROUP BY date_dim.d_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk) AS cs ON (((cs.cs_sold_year = ss.ss_sold_year) AND (cs.cs_item_sk = ss.ss_item_sk)) AND (cs.cs_customer_sk = ss.ss_customer_sk)) WHERE ((coalesce(ws.ws_qty, 0) > 0) OR (coalesce(cs.cs_qty, 0) > 0)) AND (ss.ss_sold_year = 2001) ORDER BY ss.ss_customer_sk ASC NULLS LAST, ss.ss_qty DESC NULLS FIRST, ss.ss_wc DESC NULLS FIRST, ss.ss_sp DESC NULLS FIRST, other_chan_qty ASC NULLS LAST, other_chan_wholesale_cost ASC NULLS LAST, other_chan_sales_price ASC NULLS LAST, ratio ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `ss`.`ss_customer_sk`, round((`ss`.`ss_qty` / (coalesce(`ws`.`ws_qty`, 0) + coalesce(`cs`.`cs_qty`, 0))), 2) AS `ratio`, `ss`.`ss_qty` AS `store_qty`, `ss`.`ss_wc` AS `store_wholesale_cost`, `ss`.`ss_sp` AS `store_sales_price`, (coalesce(`ws`.`ws_qty`, 0) + coalesce(`cs`.`cs_qty`, 0)) AS `other_chan_qty`, (coalesce(`ws`.`ws_wc`, 0) + coalesce(`cs`.`cs_wc`, 0)) AS `other_chan_wholesale_cost`, (coalesce(`ws`.`ws_sp`, 0) + coalesce(`cs`.`cs_sp`, 0)) AS `other_chan_sales_price` FROM (SELECT `date_dim`.`d_year` AS `ss_sold_year`, `store_sales`.`ss_item_sk`, `store_sales`.`ss_customer_sk`, sum(`store_sales`.`ss_quantity`) AS `ss_qty`, sum(`store_sales`.`ss_wholesale_cost`) AS `ss_wc`, sum(`store_sales`.`ss_sales_price`) AS `ss_sp` FROM `store_sales` LEFT JOIN `store_returns` ON ((`store_returns`.`sr_ticket_number` = `store_sales`.`ss_ticket_number`) AND (`store_sales`.`ss_item_sk` = `store_returns`.`sr_item_sk`)) JOIN `date_dim` ON (`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) WHERE `store_returns`.`sr_ticket_number` IS NULL GROUP BY `date_dim`.`d_year`, `store_sales`.`ss_item_sk`, `store_sales`.`ss_customer_sk`) AS `ss` LEFT JOIN (SELECT `date_dim`.`d_year` AS `ws_sold_year`, `web_sales`.`ws_item_sk`, `web_sales`.`ws_bill_customer_sk` AS `ws_customer_sk`, sum(`web_sales`.`ws_quantity`) AS `ws_qty`, sum(`web_sales`.`ws_wholesale_cost`) AS `ws_wc`, sum(`web_sales`.`ws_sales_price`) AS `ws_sp` FROM `web_sales` LEFT JOIN `web_returns` ON ((`web_returns`.`wr_order_number` = `web_sales`.`ws_order_number`) AND (`web_sales`.`ws_item_sk` = `web_returns`.`wr_item_sk`)) JOIN `date_dim` ON (`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) WHERE `web_returns`.`wr_order_number` IS NULL GROUP BY `date_dim`.`d_year`, `web_sales`.`ws_item_sk`, `web_sales`.`ws_bill_customer_sk`) AS `ws` ON (((`ws`.`ws_sold_year` = `ss`.`ss_sold_year`) AND (`ws`.`ws_item_sk` = `ss`.`ss_item_sk`)) AND (`ws`.`ws_customer_sk` = `ss`.`ss_customer_sk`)) LEFT JOIN (SELECT `date_dim`.`d_year` AS `cs_sold_year`, `catalog_sales`.`cs_item_sk`, `catalog_sales`.`cs_bill_customer_sk` AS `cs_customer_sk`, sum(`catalog_sales`.`cs_quantity`) AS `cs_qty`, sum(`catalog_sales`.`cs_wholesale_cost`) AS `cs_wc`, sum(`catalog_sales`.`cs_sales_price`) AS `cs_sp` FROM `catalog_sales` LEFT JOIN `catalog_returns` ON ((`catalog_returns`.`cr_order_number` = `catalog_sales`.`cs_order_number`) AND (`catalog_sales`.`cs_item_sk` = `catalog_returns`.`cr_item_sk`)) JOIN `date_dim` ON (`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) WHERE `catalog_returns`.`cr_order_number` IS NULL GROUP BY `date_dim`.`d_year`, `catalog_sales`.`cs_item_sk`, `catalog_sales`.`cs_bill_customer_sk`) AS `cs` ON (((`cs`.`cs_sold_year` = `ss`.`ss_sold_year`) AND (`cs`.`cs_item_sk` = `ss`.`ss_item_sk`)) AND (`cs`.`cs_customer_sk` = `ss`.`ss_customer_sk`)) WHERE ((coalesce(`ws`.`ws_qty`, 0) > 0) OR (coalesce(`cs`.`cs_qty`, 0) > 0)) AND (`ss`.`ss_sold_year` = 2001) ORDER BY `ss`.`ss_customer_sk` ASC NULLS LAST, `ss`.`ss_qty` DESC NULLS FIRST, `ss`.`ss_wc` DESC NULLS FIRST, `ss`.`ss_sp` DESC NULLS FIRST, `other_chan_qty` ASC NULLS LAST, `other_chan_wholesale_cost` ASC NULLS LAST, `other_chan_sales_price` ASC NULLS LAST, `ratio` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q79_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q79_explain.snap new file mode 100644 index 0000000000..58773a2b0b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q79_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q79" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, substr(ms.s_city,Int64(1),Int64(30)) ASC NULLS LAST, ms.profit ASC NULLS LAST | +| | Projection: customer.c_last_name, customer.c_first_name, substr(ms.s_city, Int64(1), Int64(30)), ms.ss_ticket_number, ms.amt, ms.profit | +| | Inner Join: Filter: ms.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: ms | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, store.s_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, store.s_city]], aggr=[[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)]] | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_dow = Int64(1), date_dim.d_year IN ([Int64(1999), Int64(1999) + Int64(1), Int64(1999) + Int64(2)])] | +| | Filter: store.s_number_employees BETWEEN Int64(200) AND Int64(295) | +| | TableScan: store projection=[s_store_sk, s_number_employees, s_city] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(0) OR household_demographics.hd_vehicle_count > Int64(4)] | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_last_name, customer.c_first_name, substr(ms.s_city, 1, 30), ms.ss_ticket_number, ms.amt, ms.profit FROM (SELECT store_sales.ss_ticket_number, store_sales.ss_customer_sk, store.s_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND ((date_dim.d_dow = 1) AND date_dim.d_year IN (1999, (1999 + 1), (1999 + 2)))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_number_employees BETWEEN 200 AND 295)) JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((household_demographics.hd_dep_count = 0) OR (household_demographics.hd_vehicle_count > 4))) GROUP BY store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, store.s_city) AS ms JOIN customer ON (ms.ss_customer_sk = customer.c_customer_sk) ORDER BY customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, substr(ms.s_city, 1, 30) ASC NULLS LAST, ms.profit ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer`.`c_last_name`, `customer`.`c_first_name`, substr(`ms`.`s_city`, 1, 30), `ms`.`ss_ticket_number`, `ms`.`amt`, `ms`.`profit` FROM (SELECT `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, `store`.`s_city`, sum(`store_sales`.`ss_coupon_amt`) AS `amt`, sum(`store_sales`.`ss_net_profit`) AS `profit` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_dow` = 1) AND `date_dim`.`d_year` IN (1999, (1999 + 1), (1999 + 2)))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_number_employees` BETWEEN 200 AND 295)) JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((`household_demographics`.`hd_dep_count` = 0) OR (`household_demographics`.`hd_vehicle_count` > 4))) GROUP BY `store_sales`.`ss_ticket_number`, `store_sales`.`ss_customer_sk`, `store_sales`.`ss_addr_sk`, `store`.`s_city`) AS `ms` JOIN `customer` ON (`ms`.`ss_customer_sk` = `customer`.`c_customer_sk`) ORDER BY `customer`.`c_last_name` ASC NULLS LAST, `customer`.`c_first_name` ASC NULLS LAST, substr(`ms`.`s_city`, 1, 30) ASC NULLS LAST, `ms`.`profit` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q7_explain.snap new file mode 100644 index 0000000000..dcf3c10a01 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q7_explain.snap @@ -0,0 +1,27 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q7" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: item.i_item_id ASC NULLS LAST | +| | Projection: item.i_item_id, avg(store_sales.ss_quantity) AS agg1, avg(store_sales.ss_list_price) AS agg2, avg(store_sales.ss_coupon_amt) AS agg3, avg(store_sales.ss_sales_price) AS agg4 | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[avg(store_sales.ss_quantity), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_promo_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] | +| | TableScan: customer_demographics projection=[cd_demo_sk], full_filters=[customer_demographics.cd_gender = Utf8("M"), customer_demographics.cd_marital_status = Utf8("M"), customer_demographics.cd_education_status = Utf8("4 yr Degree")] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2001)] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_email = Utf8("N") OR promotion.p_channel_event = Utf8("N")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, avg(store_sales.ss_quantity) AS agg1, avg(store_sales.ss_list_price) AS agg2, avg(store_sales.ss_coupon_amt) AS agg3, avg(store_sales.ss_sales_price) AS agg4 FROM store_sales JOIN customer_demographics ON ((store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk) AND (((customer_demographics.cd_gender = 'M') AND (customer_demographics.cd_marital_status = 'M')) AND (customer_demographics.cd_education_status = '4 yr Degree'))) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2001)) JOIN item ON (store_sales.ss_item_sk = item.i_item_sk) JOIN promotion ON ((store_sales.ss_promo_sk = promotion.p_promo_sk) AND ((promotion.p_channel_email = 'N') OR (promotion.p_channel_event = 'N'))) GROUP BY item.i_item_id ORDER BY item.i_item_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_id`, avg(`store_sales`.`ss_quantity`) AS `agg1`, avg(`store_sales`.`ss_list_price`) AS `agg2`, avg(`store_sales`.`ss_coupon_amt`) AS `agg3`, avg(`store_sales`.`ss_sales_price`) AS `agg4` FROM `store_sales` JOIN `customer_demographics` ON ((`store_sales`.`ss_cdemo_sk` = `customer_demographics`.`cd_demo_sk`) AND (((`customer_demographics`.`cd_gender` = 'M') AND (`customer_demographics`.`cd_marital_status` = 'M')) AND (`customer_demographics`.`cd_education_status` = '4 yr Degree'))) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2001)) JOIN `item` ON (`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) JOIN `promotion` ON ((`store_sales`.`ss_promo_sk` = `promotion`.`p_promo_sk`) AND ((`promotion`.`p_channel_email` = 'N') OR (`promotion`.`p_channel_event` = 'N'))) GROUP BY `item`.`i_item_id` ORDER BY `item`.`i_item_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q81_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q81_explain.snap new file mode 100644 index 0000000000..e1013d2f33 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q81_explain.snap @@ -0,0 +1,45 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q81" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: customer.c_customer_id ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_last_name ASC NULLS LAST, customer_address.ca_street_number ASC NULLS LAST, customer_address.ca_street_name ASC NULLS LAST, customer_address.ca_street_type ASC NULLS LAST, customer_address.ca_suite_number ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST, customer_address.ca_county ASC NULLS LAST, customer_address.ca_state ASC NULLS LAST, customer_address.ca_zip ASC NULLS LAST, customer_address.ca_country ASC NULLS LAST, customer_address.ca_gmt_offset ASC NULLS LAST, customer_address.ca_location_type ASC NULLS LAST, ctr1.ctr_total_return ASC NULLS LAST | +| | Projection: customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer_address.ca_street_number, customer_address.ca_street_name, customer_address.ca_street_type, customer_address.ca_suite_number, customer_address.ca_city, customer_address.ca_county, customer_address.ca_state, customer_address.ca_zip, customer_address.ca_country, customer_address.ca_gmt_offset, customer_address.ca_location_type, ctr1.ctr_total_return | +| | Inner Join: Filter: customer_address.ca_address_sk = customer.c_current_addr_sk AND ctr1.ctr_customer_sk = customer.c_customer_sk | +| | Cross Join: | +| | Filter: ctr1.ctr_total_return > () | +| | Subquery: | +| | Projection: avg(ctr2.ctr_total_return) * Float64(1.2) | +| | Aggregate: groupBy=[[]], aggr=[[avg(ctr2.ctr_total_return)]] | +| | Filter: outer_ref(ctr1.ctr_state) = ctr2.ctr_state | +| | SubqueryAlias: ctr2 | +| | SubqueryAlias: customer_total_return | +| | Projection: catalog_returns.cr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[catalog_returns.cr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(catalog_returns.cr_return_amt_inc_tax)]] | +| | Filter: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk AND date_dim.d_year = Int64(1998) AND catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk | +| | Cross Join: | +| | Cross Join: | +| | TableScan: catalog_returns | +| | TableScan: date_dim | +| | TableScan: customer_address | +| | SubqueryAlias: ctr1 | +| | SubqueryAlias: customer_total_return | +| | Projection: catalog_returns.cr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[catalog_returns.cr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(catalog_returns.cr_return_amt_inc_tax)]] | +| | Inner Join: Filter: catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(1998)] | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_street_type, ca_suite_number, ca_city, ca_county, ca_state, ca_zip, ca_country, ca_gmt_offset, ca_location_type], full_filters=[customer_address.ca_state = Utf8("TX")] | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer_address.ca_street_number, customer_address.ca_street_name, customer_address.ca_street_type, customer_address.ca_suite_number, customer_address.ca_city, customer_address.ca_county, customer_address.ca_state, customer_address.ca_zip, customer_address.ca_country, customer_address.ca_gmt_offset, customer_address.ca_location_type, ctr1.ctr_total_return FROM (SELECT catalog_returns.cr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return FROM catalog_returns JOIN date_dim ON ((catalog_returns.cr_returned_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 1998)) JOIN customer_address ON (catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk) GROUP BY catalog_returns.cr_returning_customer_sk, customer_address.ca_state) AS ctr1 JOIN customer_address ON (customer_address.ca_state = 'TX') JOIN customer ON ((customer_address.ca_address_sk = customer.c_current_addr_sk) AND (ctr1.ctr_customer_sk = customer.c_customer_sk)) WHERE (ctr1.ctr_total_return > (SELECT (avg(ctr2.ctr_total_return) * 1.2) FROM (SELECT catalog_returns.cr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return FROM catalog_returns CROSS JOIN date_dim CROSS JOIN customer_address WHERE (((catalog_returns.cr_returned_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 1998)) AND (catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk)) GROUP BY catalog_returns.cr_returning_customer_sk, customer_address.ca_state) AS ctr2 WHERE (ctr1.ctr_state = ctr2.ctr_state))) ORDER BY customer.c_customer_id ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_last_name ASC NULLS LAST, customer_address.ca_street_number ASC NULLS LAST, customer_address.ca_street_name ASC NULLS LAST, customer_address.ca_street_type ASC NULLS LAST, customer_address.ca_suite_number ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST, customer_address.ca_county ASC NULLS LAST, customer_address.ca_state ASC NULLS LAST, customer_address.ca_zip ASC NULLS LAST, customer_address.ca_country ASC NULLS LAST, customer_address.ca_gmt_offset ASC NULLS LAST, customer_address.ca_location_type ASC NULLS LAST, ctr1.ctr_total_return ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer`.`c_customer_id`, `customer`.`c_salutation`, `customer`.`c_first_name`, `customer`.`c_last_name`, `customer_address`.`ca_street_number`, `customer_address`.`ca_street_name`, `customer_address`.`ca_street_type`, `customer_address`.`ca_suite_number`, `customer_address`.`ca_city`, `customer_address`.`ca_county`, `customer_address`.`ca_state`, `customer_address`.`ca_zip`, `customer_address`.`ca_country`, `customer_address`.`ca_gmt_offset`, `customer_address`.`ca_location_type`, `ctr1`.`ctr_total_return` FROM (SELECT `catalog_returns`.`cr_returning_customer_sk` AS `ctr_customer_sk`, `customer_address`.`ca_state` AS `ctr_state`, sum(`catalog_returns`.`cr_return_amt_inc_tax`) AS `ctr_total_return` FROM `catalog_returns` JOIN `date_dim` ON ((`catalog_returns`.`cr_returned_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 1998)) JOIN `customer_address` ON (`catalog_returns`.`cr_returning_addr_sk` = `customer_address`.`ca_address_sk`) GROUP BY `catalog_returns`.`cr_returning_customer_sk`, `customer_address`.`ca_state`) AS `ctr1` JOIN `customer_address` ON (`customer_address`.`ca_state` = 'TX') JOIN `customer` ON ((`customer_address`.`ca_address_sk` = `customer`.`c_current_addr_sk`) AND (`ctr1`.`ctr_customer_sk` = `customer`.`c_customer_sk`)) WHERE (`ctr1`.`ctr_total_return` > (SELECT (avg(`ctr2`.`ctr_total_return`) * 1.2) FROM (SELECT `catalog_returns`.`cr_returning_customer_sk` AS `ctr_customer_sk`, `customer_address`.`ca_state` AS `ctr_state`, sum(`catalog_returns`.`cr_return_amt_inc_tax`) AS `ctr_total_return` FROM `catalog_returns` CROSS JOIN `date_dim` CROSS JOIN `customer_address` WHERE (((`catalog_returns`.`cr_returned_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 1998)) AND (`catalog_returns`.`cr_returning_addr_sk` = `customer_address`.`ca_address_sk`)) GROUP BY `catalog_returns`.`cr_returning_customer_sk`, `customer_address`.`ca_state`) AS `ctr2` WHERE (`ctr1`.`ctr_state` = `ctr2`.`ctr_state`))) ORDER BY `customer`.`c_customer_id` ASC NULLS LAST, `customer`.`c_salutation` ASC NULLS LAST, `customer`.`c_first_name` ASC NULLS LAST, `customer`.`c_last_name` ASC NULLS LAST, `customer_address`.`ca_street_number` ASC NULLS LAST, `customer_address`.`ca_street_name` ASC NULLS LAST, `customer_address`.`ca_street_type` ASC NULLS LAST, `customer_address`.`ca_suite_number` ASC NULLS LAST, `customer_address`.`ca_city` ASC NULLS LAST, `customer_address`.`ca_county` ASC NULLS LAST, `customer_address`.`ca_state` ASC NULLS LAST, `customer_address`.`ca_zip` ASC NULLS LAST, `customer_address`.`ca_country` ASC NULLS LAST, `customer_address`.`ca_gmt_offset` ASC NULLS LAST, `customer_address`.`ca_location_type` ASC NULLS LAST, `ctr1`.`ctr_total_return` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q82_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q82_explain.snap new file mode 100644 index 0000000000..994240767e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q82_explain.snap @@ -0,0 +1,28 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q82" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: item.i_item_id ASC NULLS LAST | +| | Projection: item.i_item_id, item.i_item_desc, item.i_current_price | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_current_price]], aggr=[[]] | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | Inner Join: Filter: date_dim.d_date_sk = inventory.inv_date_sk | +| | Inner Join: Filter: inventory.inv_item_sk = item.i_item_sk | +| | Filter: item.i_current_price BETWEEN Int64(69) AND Int64(69) + Int64(30) | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], full_filters=[item.i_manufact_id IN ([Int64(105), Int64(513), Int64(180), Int64(137)])] | +| | Filter: inventory.inv_quantity_on_hand BETWEEN Int64(100) AND Int64(500) | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand] | +| | Filter: date_dim.d_date BETWEEN CAST(Utf8("1998-06-06") AS Date32) AND CAST(Utf8("1998-06-06") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 60, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | TableScan: store_sales projection=[ss_item_sk] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, item.i_item_desc, item.i_current_price FROM item JOIN inventory ON ((inventory.inv_item_sk = item.i_item_sk) AND (((item.i_current_price BETWEEN 69 AND (69 + 30)) AND item.i_manufact_id IN (105, 513, 180, 137)) AND (inventory.inv_quantity_on_hand BETWEEN 100 AND 500))) JOIN date_dim ON ((date_dim.d_date_sk = inventory.inv_date_sk) AND (date_dim.d_date BETWEEN CAST('1998-06-06' AS DATE) AND (CAST('1998-06-06' AS DATE) + INTERVAL '60 DAYS'))) JOIN store_sales ON (store_sales.ss_item_sk = item.i_item_sk) GROUP BY item.i_item_id, item.i_item_desc, item.i_current_price ORDER BY item.i_item_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_current_price` FROM `item` JOIN `inventory` ON ((`inventory`.`inv_item_sk` = `item`.`i_item_sk`) AND (((`item`.`i_current_price` BETWEEN 69 AND (69 + 30)) AND `item`.`i_manufact_id` IN (105, 513, 180, 137)) AND (`inventory`.`inv_quantity_on_hand` BETWEEN 100 AND 500))) JOIN `date_dim` ON ((`date_dim`.`d_date_sk` = `inventory`.`inv_date_sk`) AND (`date_dim`.`d_date` BETWEEN CAST('1998-06-06' AS TEXT) AND (CAST(date(CAST('1998-06-06' AS TEXT), '+60 days') AS TEXT)))) JOIN `store_sales` ON (`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) GROUP BY `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_current_price` ORDER BY `item`.`i_item_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q83_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q83_explain.snap new file mode 100644 index 0000000000..cfbe78efb1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q83_explain.snap @@ -0,0 +1,70 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q83" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: sr_items.item_id ASC NULLS LAST, sr_items.sr_item_qty ASC NULLS LAST | +| | Projection: sr_items.item_id, sr_items.sr_item_qty, sr_items.sr_item_qty / (sr_items.sr_item_qty + cr_items.cr_item_qty + wr_items.wr_item_qty) / Float64(3) * Int64(100) AS sr_dev, cr_items.cr_item_qty, cr_items.cr_item_qty / (sr_items.sr_item_qty + cr_items.cr_item_qty + wr_items.wr_item_qty) / Float64(3) * Int64(100) AS cr_dev, wr_items.wr_item_qty, wr_items.wr_item_qty / (sr_items.sr_item_qty + cr_items.cr_item_qty + wr_items.wr_item_qty) / Float64(3) * Int64(100) AS wr_dev, (sr_items.sr_item_qty + cr_items.cr_item_qty + wr_items.wr_item_qty) / Float64(3) AS average | +| | Inner Join: Filter: sr_items.item_id = wr_items.item_id | +| | Inner Join: Filter: sr_items.item_id = cr_items.item_id | +| | SubqueryAlias: sr_items | +| | Projection: item.i_item_id AS item_id, sum(store_returns.sr_return_quantity) AS sr_item_qty | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_returns.sr_return_quantity)]] | +| | Inner Join: Filter: store_returns.sr_returned_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_returns.sr_item_sk = item.i_item_sk | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_return_quantity] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Filter: date_dim.d_date IN () | +| | Subquery: | +| | Projection: date_dim.d_date | +| | Filter: date_dim.d_week_seq IN () | +| | Subquery: | +| | Projection: date_dim.d_week_seq | +| | Filter: date_dim.d_date IN ([Utf8("2000-04-29"), Utf8("2000-09-09"), Utf8("2000-11-02")]) | +| | TableScan: date_dim | +| | TableScan: date_dim | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: cr_items | +| | Projection: item.i_item_id AS item_id, sum(catalog_returns.cr_return_quantity) AS cr_item_qty | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_returns.cr_return_quantity)]] | +| | Inner Join: Filter: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_returns.cr_item_sk = item.i_item_sk | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_item_sk, cr_return_quantity] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Filter: date_dim.d_date IN () | +| | Subquery: | +| | Projection: date_dim.d_date | +| | Filter: date_dim.d_week_seq IN () | +| | Subquery: | +| | Projection: date_dim.d_week_seq | +| | Filter: date_dim.d_date IN ([Utf8("2000-04-29"), Utf8("2000-09-09"), Utf8("2000-11-02")]) | +| | TableScan: date_dim | +| | TableScan: date_dim | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: wr_items | +| | Projection: item.i_item_id AS item_id, sum(web_returns.wr_return_quantity) AS wr_item_qty | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_returns.wr_return_quantity)]] | +| | Inner Join: Filter: web_returns.wr_returned_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: web_returns.wr_item_sk = item.i_item_sk | +| | TableScan: web_returns projection=[wr_returned_date_sk, wr_item_sk, wr_return_quantity] | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | Filter: date_dim.d_date IN () | +| | Subquery: | +| | Projection: date_dim.d_date | +| | Filter: date_dim.d_week_seq IN () | +| | Subquery: | +| | Projection: date_dim.d_week_seq | +| | Filter: date_dim.d_date IN ([Utf8("2000-04-29"), Utf8("2000-09-09"), Utf8("2000-11-02")]) | +| | TableScan: date_dim | +| | TableScan: date_dim | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT sr_items.item_id, sr_items.sr_item_qty, (((sr_items.sr_item_qty / ((sr_items.sr_item_qty + cr_items.cr_item_qty) + wr_items.wr_item_qty)) / 3.0) * 100) AS sr_dev, cr_items.cr_item_qty, (((cr_items.cr_item_qty / ((sr_items.sr_item_qty + cr_items.cr_item_qty) + wr_items.wr_item_qty)) / 3.0) * 100) AS cr_dev, wr_items.wr_item_qty, (((wr_items.wr_item_qty / ((sr_items.sr_item_qty + cr_items.cr_item_qty) + wr_items.wr_item_qty)) / 3.0) * 100) AS wr_dev, (((sr_items.sr_item_qty + cr_items.cr_item_qty) + wr_items.wr_item_qty) / 3.0) AS average FROM (SELECT item.i_item_id AS item_id, sum(store_returns.sr_return_quantity) AS sr_item_qty FROM store_returns JOIN item ON (store_returns.sr_item_sk = item.i_item_sk) JOIN date_dim ON ((store_returns.sr_returned_date_sk = date_dim.d_date_sk) AND date_dim.d_date IN (SELECT date_dim.d_date FROM date_dim WHERE date_dim.d_week_seq IN (SELECT date_dim.d_week_seq FROM date_dim WHERE date_dim.d_date IN ('2000-04-29', '2000-09-09', '2000-11-02')))) GROUP BY item.i_item_id) AS sr_items JOIN (SELECT item.i_item_id AS item_id, sum(catalog_returns.cr_return_quantity) AS cr_item_qty FROM catalog_returns JOIN item ON (catalog_returns.cr_item_sk = item.i_item_sk) JOIN date_dim ON ((catalog_returns.cr_returned_date_sk = date_dim.d_date_sk) AND date_dim.d_date IN (SELECT date_dim.d_date FROM date_dim WHERE date_dim.d_week_seq IN (SELECT date_dim.d_week_seq FROM date_dim WHERE date_dim.d_date IN ('2000-04-29', '2000-09-09', '2000-11-02')))) GROUP BY item.i_item_id) AS cr_items ON (sr_items.item_id = cr_items.item_id) JOIN (SELECT item.i_item_id AS item_id, sum(web_returns.wr_return_quantity) AS wr_item_qty FROM web_returns JOIN item ON (web_returns.wr_item_sk = item.i_item_sk) JOIN date_dim ON ((web_returns.wr_returned_date_sk = date_dim.d_date_sk) AND date_dim.d_date IN (SELECT date_dim.d_date FROM date_dim WHERE date_dim.d_week_seq IN (SELECT date_dim.d_week_seq FROM date_dim WHERE date_dim.d_date IN ('2000-04-29', '2000-09-09', '2000-11-02')))) GROUP BY item.i_item_id) AS wr_items ON (sr_items.item_id = wr_items.item_id) ORDER BY sr_items.item_id ASC NULLS LAST, sr_items.sr_item_qty ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `sr_items`.`item_id`, `sr_items`.`sr_item_qty`, (((`sr_items`.`sr_item_qty` / ((`sr_items`.`sr_item_qty` + `cr_items`.`cr_item_qty`) + `wr_items`.`wr_item_qty`)) / 3.0) * 100) AS `sr_dev`, `cr_items`.`cr_item_qty`, (((`cr_items`.`cr_item_qty` / ((`sr_items`.`sr_item_qty` + `cr_items`.`cr_item_qty`) + `wr_items`.`wr_item_qty`)) / 3.0) * 100) AS `cr_dev`, `wr_items`.`wr_item_qty`, (((`wr_items`.`wr_item_qty` / ((`sr_items`.`sr_item_qty` + `cr_items`.`cr_item_qty`) + `wr_items`.`wr_item_qty`)) / 3.0) * 100) AS `wr_dev`, (((`sr_items`.`sr_item_qty` + `cr_items`.`cr_item_qty`) + `wr_items`.`wr_item_qty`) / 3.0) AS `average` FROM (SELECT `item`.`i_item_id` AS `item_id`, sum(`store_returns`.`sr_return_quantity`) AS `sr_item_qty` FROM `store_returns` JOIN `item` ON (`store_returns`.`sr_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`store_returns`.`sr_returned_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_date` IN (SELECT `date_dim`.`d_date` FROM `date_dim` WHERE `date_dim`.`d_week_seq` IN (SELECT `date_dim`.`d_week_seq` FROM `date_dim` WHERE `date_dim`.`d_date` IN ('2000-04-29', '2000-09-09', '2000-11-02')))) GROUP BY `item`.`i_item_id`) AS `sr_items` JOIN (SELECT `item`.`i_item_id` AS `item_id`, sum(`catalog_returns`.`cr_return_quantity`) AS `cr_item_qty` FROM `catalog_returns` JOIN `item` ON (`catalog_returns`.`cr_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`catalog_returns`.`cr_returned_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_date` IN (SELECT `date_dim`.`d_date` FROM `date_dim` WHERE `date_dim`.`d_week_seq` IN (SELECT `date_dim`.`d_week_seq` FROM `date_dim` WHERE `date_dim`.`d_date` IN ('2000-04-29', '2000-09-09', '2000-11-02')))) GROUP BY `item`.`i_item_id`) AS `cr_items` ON (`sr_items`.`item_id` = `cr_items`.`item_id`) JOIN (SELECT `item`.`i_item_id` AS `item_id`, sum(`web_returns`.`wr_return_quantity`) AS `wr_item_qty` FROM `web_returns` JOIN `item` ON (`web_returns`.`wr_item_sk` = `item`.`i_item_sk`) JOIN `date_dim` ON ((`web_returns`.`wr_returned_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_date` IN (SELECT `date_dim`.`d_date` FROM `date_dim` WHERE `date_dim`.`d_week_seq` IN (SELECT `date_dim`.`d_week_seq` FROM `date_dim` WHERE `date_dim`.`d_date` IN ('2000-04-29', '2000-09-09', '2000-11-02')))) GROUP BY `item`.`i_item_id`) AS `wr_items` ON (`sr_items`.`item_id` = `wr_items`.`item_id`) ORDER BY `sr_items`.`item_id` ASC NULLS LAST, `sr_items`.`sr_item_qty` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q84_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q84_explain.snap new file mode 100644 index 0000000000..39bd444454 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q84_explain.snap @@ -0,0 +1,29 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q84" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: customer_id, customername | +| | Sort: customer.c_customer_id ASC NULLS LAST | +| | Projection: customer.c_customer_id AS customer_id, coalesce(customer.c_last_name, Utf8("")) || Utf8(", ") || coalesce(customer.c_first_name, Utf8("")) AS customername, customer.c_customer_id | +| | Inner Join: Filter: store_returns.sr_cdemo_sk = customer_demographics.cd_demo_sk | +| | Inner Join: Filter: income_band.ib_income_band_sk = household_demographics.hd_income_band_sk | +| | Inner Join: Filter: household_demographics.hd_demo_sk = customer.c_current_hdemo_sk | +| | Inner Join: Filter: customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk | +| | Inner Join: Filter: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | TableScan: customer projection=[c_customer_id, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_city = Utf8("White Oak")] | +| | TableScan: customer_demographics projection=[cd_demo_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | TableScan: income_band projection=[ib_income_band_sk], full_filters=[income_band.ib_lower_bound >= Int64(45626), income_band.ib_upper_bound <= Int64(45626) + Int64(50000)] | +| | TableScan: store_returns projection=[sr_cdemo_sk] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT customer.c_customer_id AS customer_id, ((coalesce(customer.c_last_name, '') || ', ') || coalesce(customer.c_first_name, '')) AS customername FROM customer JOIN customer_address ON ((customer.c_current_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_city = 'White Oak')) JOIN customer_demographics ON (customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk) JOIN household_demographics ON (household_demographics.hd_demo_sk = customer.c_current_hdemo_sk) JOIN income_band ON ((income_band.ib_income_band_sk = household_demographics.hd_income_band_sk) AND ((income_band.ib_lower_bound >= 45626) AND (income_band.ib_upper_bound <= (45626 + 50000)))) JOIN store_returns ON (store_returns.sr_cdemo_sk = customer_demographics.cd_demo_sk) ORDER BY customer.c_customer_id ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `customer`.`c_customer_id` AS `customer_id`, ((coalesce(`customer`.`c_last_name`, '') || ', ') || coalesce(`customer`.`c_first_name`, '')) AS `customername` FROM `customer` JOIN `customer_address` ON ((`customer`.`c_current_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_city` = 'White Oak')) JOIN `customer_demographics` ON (`customer_demographics`.`cd_demo_sk` = `customer`.`c_current_cdemo_sk`) JOIN `household_demographics` ON (`household_demographics`.`hd_demo_sk` = `customer`.`c_current_hdemo_sk`) JOIN `income_band` ON ((`income_band`.`ib_income_band_sk` = `household_demographics`.`hd_income_band_sk`) AND ((`income_band`.`ib_lower_bound` >= 45626) AND (`income_band`.`ib_upper_bound` <= (45626 + 50000)))) JOIN `store_returns` ON (`store_returns`.`sr_cdemo_sk` = `customer_demographics`.`cd_demo_sk`) ORDER BY `customer`.`c_customer_id` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q85_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q85_explain.snap new file mode 100644 index 0000000000..236743404f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q85_explain.snap @@ -0,0 +1,37 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q85" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: substr(reason.r_reason_desc,Int64(1),Int64(20)) ASC NULLS LAST, avg(web_sales.ws_quantity) ASC NULLS LAST, avg(web_returns.wr_refunded_cash) ASC NULLS LAST, avg(web_returns.wr_fee) ASC NULLS LAST | +| | Projection: substr(reason.r_reason_desc, Int64(1), Int64(20)), avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee) | +| | Aggregate: groupBy=[[reason.r_reason_desc]], aggr=[[avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)]] | +| | Inner Join: Filter: reason.r_reason_sk = web_returns.wr_reason_sk | +| | Inner Join: Filter: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: customer_address.ca_address_sk = web_returns.wr_refunded_addr_sk AND (customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("SC"), Utf8("IN"), Utf8("VA")]) AND web_sales.ws_net_profit BETWEEN Int64(100) AND Int64(200) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("WA"), Utf8("KS"), Utf8("KY")]) AND web_sales.ws_net_profit BETWEEN Int64(150) AND Int64(300) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("SD"), Utf8("WI"), Utf8("NE")]) AND web_sales.ws_net_profit BETWEEN Int64(50) AND Int64(250)) | +| | Inner Join: Filter: cd2.cd_demo_sk = web_returns.wr_returning_cdemo_sk AND (cd1.cd_marital_status = Utf8("D") AND cd1.cd_marital_status = cd2.cd_marital_status AND cd1.cd_education_status = Utf8("Primary") AND cd1.cd_education_status = cd2.cd_education_status AND web_sales.ws_sales_price BETWEEN Float64(100) AND Float64(150) OR cd1.cd_marital_status = Utf8("U") AND cd1.cd_marital_status = cd2.cd_marital_status AND cd1.cd_education_status = Utf8("Unknown") AND cd1.cd_education_status = cd2.cd_education_status AND web_sales.ws_sales_price BETWEEN Float64(50) AND Float64(100) OR cd1.cd_marital_status = Utf8("M") AND cd1.cd_marital_status = cd2.cd_marital_status AND cd1.cd_education_status = Utf8("Advanced Degree") AND cd1.cd_education_status = cd2.cd_education_status AND web_sales.ws_sales_price BETWEEN Float64(150) AND Float64(200)) | +| | Inner Join: Filter: cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk AND (cd1.cd_marital_status = Utf8("D") AND cd1.cd_education_status = Utf8("Primary") AND web_sales.ws_sales_price BETWEEN Float64(100) AND Float64(150) OR cd1.cd_marital_status = Utf8("U") AND cd1.cd_education_status = Utf8("Unknown") AND web_sales.ws_sales_price BETWEEN Float64(50) AND Float64(100) OR cd1.cd_marital_status = Utf8("M") AND cd1.cd_education_status = Utf8("Advanced Degree") AND web_sales.ws_sales_price BETWEEN Float64(150) AND Float64(200)) | +| | Inner Join: Filter: web_sales.ws_web_page_sk = web_page.wp_web_page_sk | +| | Inner Join: Filter: web_sales.ws_item_sk = web_returns.wr_item_sk AND web_sales.ws_order_number = web_returns.wr_order_number | +| | Filter: (web_sales.ws_net_profit BETWEEN Int64(100) AND Int64(200) OR web_sales.ws_net_profit BETWEEN Int64(150) AND Int64(300) OR web_sales.ws_net_profit BETWEEN Int64(50) AND Int64(250)) AND (web_sales.ws_sales_price BETWEEN Float64(100) AND Float64(150) OR web_sales.ws_sales_price BETWEEN Float64(50) AND Float64(100) OR web_sales.ws_sales_price BETWEEN Float64(150) AND Float64(200)) | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_web_page_sk, ws_order_number, ws_quantity, ws_sales_price, ws_net_profit] | +| | TableScan: web_returns projection=[wr_item_sk, wr_refunded_cdemo_sk, wr_refunded_addr_sk, wr_returning_cdemo_sk, wr_reason_sk, wr_order_number, wr_fee, wr_refunded_cash] | +| | TableScan: web_page projection=[wp_web_page_sk] | +| | Filter: cd1.cd_marital_status = Utf8("D") AND cd1.cd_education_status = Utf8("Primary") OR cd1.cd_marital_status = Utf8("U") AND cd1.cd_education_status = Utf8("Unknown") OR cd1.cd_marital_status = Utf8("M") AND cd1.cd_education_status = Utf8("Advanced Degree") | +| | SubqueryAlias: cd1 | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status] | +| | SubqueryAlias: cd2 | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status] | +| | TableScan: customer_address projection=[ca_address_sk, ca_state, ca_country], full_filters=[customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("SC"), Utf8("IN"), Utf8("VA")]) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("WA"), Utf8("KS"), Utf8("KY")]) OR customer_address.ca_country = Utf8("United States") AND customer_address.ca_state IN ([Utf8("SD"), Utf8("WI"), Utf8("NE")])] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2001)] | +| | TableScan: reason projection=[r_reason_sk, r_reason_desc] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT substr(reason.r_reason_desc, 1, 20), avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee) FROM web_sales JOIN web_returns ON (((web_sales.ws_item_sk = web_returns.wr_item_sk) AND (web_sales.ws_order_number = web_returns.wr_order_number)) AND ((((web_sales.ws_net_profit BETWEEN 100 AND 200) OR (web_sales.ws_net_profit BETWEEN 150 AND 300)) OR (web_sales.ws_net_profit BETWEEN 50 AND 250)) AND (((web_sales.ws_sales_price BETWEEN 100.0 AND 150.0) OR (web_sales.ws_sales_price BETWEEN 50.0 AND 100.0)) OR (web_sales.ws_sales_price BETWEEN 150.0 AND 200.0)))) JOIN web_page ON (web_sales.ws_web_page_sk = web_page.wp_web_page_sk) JOIN customer_demographics AS cd1 ON (((cd1.cd_demo_sk = web_returns.wr_refunded_cdemo_sk) AND (((((cd1.cd_marital_status = 'D') AND (cd1.cd_education_status = 'Primary')) AND (web_sales.ws_sales_price BETWEEN 100.0 AND 150.0)) OR (((cd1.cd_marital_status = 'U') AND (cd1.cd_education_status = 'Unknown')) AND (web_sales.ws_sales_price BETWEEN 50.0 AND 100.0))) OR (((cd1.cd_marital_status = 'M') AND (cd1.cd_education_status = 'Advanced Degree')) AND (web_sales.ws_sales_price BETWEEN 150.0 AND 200.0)))) AND ((((cd1.cd_marital_status = 'D') AND (cd1.cd_education_status = 'Primary')) OR ((cd1.cd_marital_status = 'U') AND (cd1.cd_education_status = 'Unknown'))) OR ((cd1.cd_marital_status = 'M') AND (cd1.cd_education_status = 'Advanced Degree')))) JOIN customer_demographics AS cd2 ON ((cd2.cd_demo_sk = web_returns.wr_returning_cdemo_sk) AND (((((((cd1.cd_marital_status = 'D') AND (cd1.cd_marital_status = cd2.cd_marital_status)) AND (cd1.cd_education_status = 'Primary')) AND (cd1.cd_education_status = cd2.cd_education_status)) AND (web_sales.ws_sales_price BETWEEN 100.0 AND 150.0)) OR (((((cd1.cd_marital_status = 'U') AND (cd1.cd_marital_status = cd2.cd_marital_status)) AND (cd1.cd_education_status = 'Unknown')) AND (cd1.cd_education_status = cd2.cd_education_status)) AND (web_sales.ws_sales_price BETWEEN 50.0 AND 100.0))) OR (((((cd1.cd_marital_status = 'M') AND (cd1.cd_marital_status = cd2.cd_marital_status)) AND (cd1.cd_education_status = 'Advanced Degree')) AND (cd1.cd_education_status = cd2.cd_education_status)) AND (web_sales.ws_sales_price BETWEEN 150.0 AND 200.0)))) JOIN customer_address ON (((customer_address.ca_address_sk = web_returns.wr_refunded_addr_sk) AND (((((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('SC', 'IN', 'VA')) AND (web_sales.ws_net_profit BETWEEN 100 AND 200)) OR (((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('WA', 'KS', 'KY')) AND (web_sales.ws_net_profit BETWEEN 150 AND 300))) OR (((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('SD', 'WI', 'NE')) AND (web_sales.ws_net_profit BETWEEN 50 AND 250)))) AND ((((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('SC', 'IN', 'VA')) OR ((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('WA', 'KS', 'KY'))) OR ((customer_address.ca_country = 'United States') AND customer_address.ca_state IN ('SD', 'WI', 'NE')))) JOIN date_dim ON ((web_sales.ws_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_year = 2001)) JOIN reason ON (reason.r_reason_sk = web_returns.wr_reason_sk) GROUP BY reason.r_reason_desc ORDER BY substr(reason.r_reason_desc, 1, 20) ASC NULLS LAST, avg(web_sales.ws_quantity) ASC NULLS LAST, avg(web_returns.wr_refunded_cash) ASC NULLS LAST, avg(web_returns.wr_fee) ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT substr(`reason`.`r_reason_desc`, 1, 20), avg(`web_sales`.`ws_quantity`), avg(`web_returns`.`wr_refunded_cash`), avg(`web_returns`.`wr_fee`) FROM `web_sales` JOIN `web_returns` ON (((`web_sales`.`ws_item_sk` = `web_returns`.`wr_item_sk`) AND (`web_sales`.`ws_order_number` = `web_returns`.`wr_order_number`)) AND ((((`web_sales`.`ws_net_profit` BETWEEN 100 AND 200) OR (`web_sales`.`ws_net_profit` BETWEEN 150 AND 300)) OR (`web_sales`.`ws_net_profit` BETWEEN 50 AND 250)) AND (((`web_sales`.`ws_sales_price` BETWEEN 100.0 AND 150.0) OR (`web_sales`.`ws_sales_price` BETWEEN 50.0 AND 100.0)) OR (`web_sales`.`ws_sales_price` BETWEEN 150.0 AND 200.0)))) JOIN `web_page` ON (`web_sales`.`ws_web_page_sk` = `web_page`.`wp_web_page_sk`) JOIN `customer_demographics` AS `cd1` ON (((`cd1`.`cd_demo_sk` = `web_returns`.`wr_refunded_cdemo_sk`) AND (((((`cd1`.`cd_marital_status` = 'D') AND (`cd1`.`cd_education_status` = 'Primary')) AND (`web_sales`.`ws_sales_price` BETWEEN 100.0 AND 150.0)) OR (((`cd1`.`cd_marital_status` = 'U') AND (`cd1`.`cd_education_status` = 'Unknown')) AND (`web_sales`.`ws_sales_price` BETWEEN 50.0 AND 100.0))) OR (((`cd1`.`cd_marital_status` = 'M') AND (`cd1`.`cd_education_status` = 'Advanced Degree')) AND (`web_sales`.`ws_sales_price` BETWEEN 150.0 AND 200.0)))) AND ((((`cd1`.`cd_marital_status` = 'D') AND (`cd1`.`cd_education_status` = 'Primary')) OR ((`cd1`.`cd_marital_status` = 'U') AND (`cd1`.`cd_education_status` = 'Unknown'))) OR ((`cd1`.`cd_marital_status` = 'M') AND (`cd1`.`cd_education_status` = 'Advanced Degree')))) JOIN `customer_demographics` AS `cd2` ON ((`cd2`.`cd_demo_sk` = `web_returns`.`wr_returning_cdemo_sk`) AND (((((((`cd1`.`cd_marital_status` = 'D') AND (`cd1`.`cd_marital_status` = `cd2`.`cd_marital_status`)) AND (`cd1`.`cd_education_status` = 'Primary')) AND (`cd1`.`cd_education_status` = `cd2`.`cd_education_status`)) AND (`web_sales`.`ws_sales_price` BETWEEN 100.0 AND 150.0)) OR (((((`cd1`.`cd_marital_status` = 'U') AND (`cd1`.`cd_marital_status` = `cd2`.`cd_marital_status`)) AND (`cd1`.`cd_education_status` = 'Unknown')) AND (`cd1`.`cd_education_status` = `cd2`.`cd_education_status`)) AND (`web_sales`.`ws_sales_price` BETWEEN 50.0 AND 100.0))) OR (((((`cd1`.`cd_marital_status` = 'M') AND (`cd1`.`cd_marital_status` = `cd2`.`cd_marital_status`)) AND (`cd1`.`cd_education_status` = 'Advanced Degree')) AND (`cd1`.`cd_education_status` = `cd2`.`cd_education_status`)) AND (`web_sales`.`ws_sales_price` BETWEEN 150.0 AND 200.0)))) JOIN `customer_address` ON (((`customer_address`.`ca_address_sk` = `web_returns`.`wr_refunded_addr_sk`) AND (((((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('SC', 'IN', 'VA')) AND (`web_sales`.`ws_net_profit` BETWEEN 100 AND 200)) OR (((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('WA', 'KS', 'KY')) AND (`web_sales`.`ws_net_profit` BETWEEN 150 AND 300))) OR (((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('SD', 'WI', 'NE')) AND (`web_sales`.`ws_net_profit` BETWEEN 50 AND 250)))) AND ((((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('SC', 'IN', 'VA')) OR ((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('WA', 'KS', 'KY'))) OR ((`customer_address`.`ca_country` = 'United States') AND `customer_address`.`ca_state` IN ('SD', 'WI', 'NE')))) JOIN `date_dim` ON ((`web_sales`.`ws_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_year` = 2001)) JOIN `reason` ON (`reason`.`r_reason_sk` = `web_returns`.`wr_reason_sk`) GROUP BY `reason`.`r_reason_desc` ORDER BY substr(`reason`.`r_reason_desc`, 1, 20) ASC NULLS LAST, avg(`web_sales`.`ws_quantity`) ASC NULLS LAST, avg(`web_returns`.`wr_refunded_cash`) ASC NULLS LAST, avg(`web_returns`.`wr_fee`) ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q88_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q88_explain.snap new file mode 100644 index 0000000000..ab5fd47de8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q88_explain.snap @@ -0,0 +1,102 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q88" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: s1.h8_30_to_9, s2.h9_to_9_30, s3.h9_30_to_10, s4.h10_to_10_30, s5.h10_30_to_11, s6.h11_to_11_30, s7.h11_30_to_12, s8.h12_to_12_30 | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | SubqueryAlias: s1 | +| | Projection: count(*) AS h8_30_to_9 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(8), time_dim.t_minute >= Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| | SubqueryAlias: s2 | +| | Projection: count(*) AS h9_to_9_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(9), time_dim.t_minute < Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| | SubqueryAlias: s3 | +| | Projection: count(*) AS h9_30_to_10 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(9), time_dim.t_minute >= Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| | SubqueryAlias: s4 | +| | Projection: count(*) AS h10_to_10_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(10), time_dim.t_minute < Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| | SubqueryAlias: s5 | +| | Projection: count(*) AS h10_30_to_11 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(10), time_dim.t_minute >= Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| | SubqueryAlias: s6 | +| | Projection: count(*) AS h11_to_11_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(11), time_dim.t_minute < Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| | SubqueryAlias: s7 | +| | Projection: count(*) AS h11_30_to_12 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(11), time_dim.t_minute >= Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| | SubqueryAlias: s8 | +| | Projection: count(*) AS h12_to_12_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2) AND household_demographics.hd_vehicle_count <= Int64(2) + Int64(2) OR household_demographics.hd_dep_count = Int64(1) AND household_demographics.hd_vehicle_count <= Int64(1) + Int64(2) OR household_demographics.hd_dep_count = Int64(4) AND household_demographics.hd_vehicle_count <= Int64(4) + Int64(2)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(12), time_dim.t_minute < Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT s1.h8_30_to_9, s2.h9_to_9_30, s3.h9_30_to_10, s4.h10_to_10_30, s5.h10_30_to_11, s6.h11_to_11_30, s7.h11_30_to_12, s8.h12_to_12_30 FROM (SELECT count(*) AS h8_30_to_9 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 8) AND (time_dim.t_minute >= 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s1 CROSS JOIN (SELECT count(*) AS h9_to_9_30 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 9) AND (time_dim.t_minute < 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s2 CROSS JOIN (SELECT count(*) AS h9_30_to_10 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 9) AND (time_dim.t_minute >= 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s3 CROSS JOIN (SELECT count(*) AS h10_to_10_30 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 10) AND (time_dim.t_minute < 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s4 CROSS JOIN (SELECT count(*) AS h10_30_to_11 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 10) AND (time_dim.t_minute >= 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s5 CROSS JOIN (SELECT count(*) AS h11_to_11_30 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 11) AND (time_dim.t_minute < 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s6 CROSS JOIN (SELECT count(*) AS h11_30_to_12 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 11) AND (time_dim.t_minute >= 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s7 CROSS JOIN (SELECT count(*) AS h12_to_12_30 FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND ((((household_demographics.hd_dep_count = 2) AND (household_demographics.hd_vehicle_count <= (2 + 2))) OR ((household_demographics.hd_dep_count = 1) AND (household_demographics.hd_vehicle_count <= (1 + 2)))) OR ((household_demographics.hd_dep_count = 4) AND (household_demographics.hd_vehicle_count <= (4 + 2))))) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 12) AND (time_dim.t_minute < 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese'))) AS s8 rewritten_sql=SELECT `s1`.`h8_30_to_9`, `s2`.`h9_to_9_30`, `s3`.`h9_30_to_10`, `s4`.`h10_to_10_30`, `s5`.`h10_30_to_11`, `s6`.`h11_to_11_30`, `s7`.`h11_30_to_12`, `s8`.`h12_to_12_30` FROM (SELECT count(*) AS `h8_30_to_9` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 8) AND (`time_dim`.`t_minute` >= 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s1` CROSS JOIN (SELECT count(*) AS `h9_to_9_30` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 9) AND (`time_dim`.`t_minute` < 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s2` CROSS JOIN (SELECT count(*) AS `h9_30_to_10` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 9) AND (`time_dim`.`t_minute` >= 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s3` CROSS JOIN (SELECT count(*) AS `h10_to_10_30` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 10) AND (`time_dim`.`t_minute` < 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s4` CROSS JOIN (SELECT count(*) AS `h10_30_to_11` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 10) AND (`time_dim`.`t_minute` >= 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s5` CROSS JOIN (SELECT count(*) AS `h11_to_11_30` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 11) AND (`time_dim`.`t_minute` < 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s6` CROSS JOIN (SELECT count(*) AS `h11_30_to_12` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 11) AND (`time_dim`.`t_minute` >= 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s7` CROSS JOIN (SELECT count(*) AS `h12_to_12_30` FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND ((((`household_demographics`.`hd_dep_count` = 2) AND (`household_demographics`.`hd_vehicle_count` <= (2 + 2))) OR ((`household_demographics`.`hd_dep_count` = 1) AND (`household_demographics`.`hd_vehicle_count` <= (1 + 2)))) OR ((`household_demographics`.`hd_dep_count` = 4) AND (`household_demographics`.`hd_vehicle_count` <= (4 + 2))))) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 12) AND (`time_dim`.`t_minute` < 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese'))) AS `s8` | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q89_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q89_explain.snap new file mode 100644 index 0000000000..a2ccd744a0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q89_explain.snap @@ -0,0 +1,29 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q89" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: tmp1.sum_sales - tmp1.avg_monthly_sales ASC NULLS LAST, tmp1.s_store_name ASC NULLS LAST | +| | Projection: tmp1.i_category, tmp1.i_class, tmp1.i_brand, tmp1.s_store_name, tmp1.s_company_name, tmp1.d_moy, tmp1.sum_sales, tmp1.avg_monthly_sales | +| | Filter: CASE WHEN tmp1.avg_monthly_sales != Int64(0) THEN abs(tmp1.sum_sales - tmp1.avg_monthly_sales) / tmp1.avg_monthly_sales ELSE NULL END > Float64(0.1) | +| | SubqueryAlias: tmp1 | +| | Projection: item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: item projection=[i_item_sk, i_brand, i_class, i_category], full_filters=[item.i_category IN ([Utf8("Children"), Utf8("Jewelry"), Utf8("Home")]) AND item.i_class IN ([Utf8("infants"), Utf8("birdal"), Utf8("flatware")]) OR item.i_category IN ([Utf8("Electronics"), Utf8("Music"), Utf8("Books")]) AND item.i_class IN ([Utf8("audio"), Utf8("classical"), Utf8("science")])] | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | TableScan: date_dim projection=[d_date_sk, d_moy], full_filters=[date_dim.d_year IN ([Int64(2001)])] | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT tmp1.i_category, tmp1.i_class, tmp1.i_brand, tmp1.s_store_name, tmp1.s_company_name, tmp1.d_moy, tmp1.sum_sales, tmp1.avg_monthly_sales FROM (SELECT item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) OVER (PARTITION BY item.i_category, item.i_brand, store.s_store_name, store.s_company_name ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS avg_monthly_sales FROM item JOIN store_sales ON ((store_sales.ss_item_sk = item.i_item_sk) AND ((item.i_category IN ('Children', 'Jewelry', 'Home') AND item.i_class IN ('infants', 'birdal', 'flatware')) OR (item.i_category IN ('Electronics', 'Music', 'Books') AND item.i_class IN ('audio', 'classical', 'science')))) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND date_dim.d_year IN (2001)) JOIN store ON (store_sales.ss_store_sk = store.s_store_sk) GROUP BY item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy) AS tmp1 WHERE (CASE WHEN (tmp1.avg_monthly_sales <> 0) THEN (abs((tmp1.sum_sales - tmp1.avg_monthly_sales)) / tmp1.avg_monthly_sales) ELSE NULL END > 0.1) ORDER BY (tmp1.sum_sales - tmp1.avg_monthly_sales) ASC NULLS LAST, tmp1.s_store_name ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `tmp1`.`i_category`, `tmp1`.`i_class`, `tmp1`.`i_brand`, `tmp1`.`s_store_name`, `tmp1`.`s_company_name`, `tmp1`.`d_moy`, `tmp1`.`sum_sales`, `tmp1`.`avg_monthly_sales` FROM (SELECT `item`.`i_category`, `item`.`i_class`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, `date_dim`.`d_moy`, sum(`store_sales`.`ss_sales_price`) AS `sum_sales`, avg(sum(`store_sales`.`ss_sales_price`)) OVER (PARTITION BY `item`.`i_category`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `avg_monthly_sales` FROM `item` JOIN `store_sales` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND ((`item`.`i_category` IN ('Children', 'Jewelry', 'Home') AND `item`.`i_class` IN ('infants', 'birdal', 'flatware')) OR (`item`.`i_category` IN ('Electronics', 'Music', 'Books') AND `item`.`i_class` IN ('audio', 'classical', 'science')))) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND `date_dim`.`d_year` IN (2001)) JOIN `store` ON (`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) GROUP BY `item`.`i_category`, `item`.`i_class`, `item`.`i_brand`, `store`.`s_store_name`, `store`.`s_company_name`, `date_dim`.`d_moy`) AS `tmp1` WHERE (CASE WHEN (`tmp1`.`avg_monthly_sales` <> 0) THEN (abs((`tmp1`.`sum_sales` - `tmp1`.`avg_monthly_sales`)) / `tmp1`.`avg_monthly_sales`) ELSE NULL END > 0.1) ORDER BY (`tmp1`.`sum_sales` - `tmp1`.`avg_monthly_sales`) ASC NULLS LAST, `tmp1`.`s_store_name` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q90_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q90_explain.snap new file mode 100644 index 0000000000..8cd101f054 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q90_explain.snap @@ -0,0 +1,42 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q90" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: am_pm_ratio ASC NULLS LAST | +| | Projection: CAST(at.amc AS Decimal128(15, 4)) / CAST(pt.pmc AS Decimal128(15, 4)) AS am_pm_ratio | +| | Cross Join: | +| | SubqueryAlias: at | +| | Projection: count(*) AS amc | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: web_sales.ws_web_page_sk = web_page.wp_web_page_sk | +| | Inner Join: Filter: web_sales.ws_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: web_sales projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2)] | +| | Filter: time_dim.t_hour BETWEEN Int64(9) AND Int64(9) + Int64(1) | +| | TableScan: time_dim projection=[t_time_sk, t_hour] | +| | Filter: web_page.wp_char_count BETWEEN Int64(2500) AND Int64(5200) | +| | TableScan: web_page projection=[wp_web_page_sk, wp_char_count] | +| | SubqueryAlias: pt | +| | Projection: count(*) AS pmc | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: web_sales.ws_web_page_sk = web_page.wp_web_page_sk | +| | Inner Join: Filter: web_sales.ws_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: web_sales projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(2)] | +| | Filter: time_dim.t_hour BETWEEN Int64(15) AND Int64(15) + Int64(1) | +| | TableScan: time_dim projection=[t_time_sk, t_hour] | +| | Filter: web_page.wp_char_count BETWEEN Int64(2500) AND Int64(5200) | +| | TableScan: web_page projection=[wp_web_page_sk, wp_char_count] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT (CAST("at".amc AS DECIMAL(15,4)) / CAST(pt.pmc AS DECIMAL(15,4))) AS am_pm_ratio FROM (SELECT count(*) AS amc FROM web_sales JOIN household_demographics ON ((web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk) AND (household_demographics.hd_dep_count = 2)) JOIN time_dim ON ((web_sales.ws_sold_time_sk = time_dim.t_time_sk) AND (time_dim.t_hour BETWEEN 9 AND (9 + 1))) JOIN web_page ON ((web_sales.ws_web_page_sk = web_page.wp_web_page_sk) AND (web_page.wp_char_count BETWEEN 2500 AND 5200))) AS "at" CROSS JOIN (SELECT count(*) AS pmc FROM web_sales JOIN household_demographics ON ((web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk) AND (household_demographics.hd_dep_count = 2)) JOIN time_dim ON ((web_sales.ws_sold_time_sk = time_dim.t_time_sk) AND (time_dim.t_hour BETWEEN 15 AND (15 + 1))) JOIN web_page ON ((web_sales.ws_web_page_sk = web_page.wp_web_page_sk) AND (web_page.wp_char_count BETWEEN 2500 AND 5200))) AS pt ORDER BY am_pm_ratio ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT (CAST(`at`.`amc` AS DECIMAL(15,4)) / CAST(`pt`.`pmc` AS DECIMAL(15,4))) AS `am_pm_ratio` FROM (SELECT count(*) AS `amc` FROM `web_sales` JOIN `household_demographics` ON ((`web_sales`.`ws_ship_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (`household_demographics`.`hd_dep_count` = 2)) JOIN `time_dim` ON ((`web_sales`.`ws_sold_time_sk` = `time_dim`.`t_time_sk`) AND (`time_dim`.`t_hour` BETWEEN 9 AND (9 + 1))) JOIN `web_page` ON ((`web_sales`.`ws_web_page_sk` = `web_page`.`wp_web_page_sk`) AND (`web_page`.`wp_char_count` BETWEEN 2500 AND 5200))) AS `at` CROSS JOIN (SELECT count(*) AS `pmc` FROM `web_sales` JOIN `household_demographics` ON ((`web_sales`.`ws_ship_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (`household_demographics`.`hd_dep_count` = 2)) JOIN `time_dim` ON ((`web_sales`.`ws_sold_time_sk` = `time_dim`.`t_time_sk`) AND (`time_dim`.`t_hour` BETWEEN 15 AND (15 + 1))) JOIN `web_page` ON ((`web_sales`.`ws_web_page_sk` = `web_page`.`wp_web_page_sk`) AND (`web_page`.`wp_char_count` BETWEEN 2500 AND 5200))) AS `pt` ORDER BY `am_pm_ratio` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q91_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q91_explain.snap new file mode 100644 index 0000000000..09bcb8a5f2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q91_explain.snap @@ -0,0 +1,31 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q91" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: Call_Center, Call_Center_Name, Manager, Returns_Loss | +| | Sort: sum(catalog_returns.cr_net_loss) AS Returns_Loss DESC NULLS FIRST | +| | Projection: call_center.cc_call_center_id AS Call_Center, call_center.cc_name AS Call_Center_Name, call_center.cc_manager AS Manager, sum(catalog_returns.cr_net_loss) AS Returns_Loss, sum(catalog_returns.cr_net_loss) | +| | Aggregate: groupBy=[[call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, customer_demographics.cd_marital_status, customer_demographics.cd_education_status]], aggr=[[sum(catalog_returns.cr_net_loss)]] | +| | Inner Join: Filter: household_demographics.hd_demo_sk = customer.c_current_hdemo_sk | +| | Inner Join: Filter: customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk | +| | Inner Join: Filter: customer_address.ca_address_sk = customer.c_current_addr_sk | +| | Inner Join: Filter: catalog_returns.cr_returning_customer_sk = customer.c_customer_sk | +| | Inner Join: Filter: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_returns.cr_call_center_sk = call_center.cc_call_center_sk | +| | TableScan: call_center projection=[cc_call_center_sk, cc_call_center_id, cc_name, cc_manager] | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_call_center_sk, cr_net_loss] | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int64(2002), date_dim.d_moy = Int64(11)] | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Int64(-6)] | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], full_filters=[customer_demographics.cd_marital_status = Utf8("M") AND customer_demographics.cd_education_status = Utf8("Unknown") OR customer_demographics.cd_marital_status = Utf8("W") AND customer_demographics.cd_education_status = Utf8("Advanced Degree")] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_buy_potential LIKE Utf8("Unknown%")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT Call_Center, Call_Center_Name, Manager, Returns_Loss FROM (SELECT call_center.cc_call_center_id AS Call_Center, call_center.cc_name AS Call_Center_Name, call_center.cc_manager AS Manager, sum(catalog_returns.cr_net_loss) AS Returns_Loss, sum(catalog_returns.cr_net_loss) FROM call_center JOIN catalog_returns ON (catalog_returns.cr_call_center_sk = call_center.cc_call_center_sk) JOIN date_dim ON ((catalog_returns.cr_returned_date_sk = date_dim.d_date_sk) AND ((date_dim.d_year = 2002) AND (date_dim.d_moy = 11))) JOIN customer ON (catalog_returns.cr_returning_customer_sk = customer.c_customer_sk) JOIN customer_address ON ((customer_address.ca_address_sk = customer.c_current_addr_sk) AND (customer_address.ca_gmt_offset = -6)) JOIN customer_demographics ON ((customer_demographics.cd_demo_sk = customer.c_current_cdemo_sk) AND (((customer_demographics.cd_marital_status = 'M') AND (customer_demographics.cd_education_status = 'Unknown')) OR ((customer_demographics.cd_marital_status = 'W') AND (customer_demographics.cd_education_status = 'Advanced Degree')))) JOIN household_demographics ON ((household_demographics.hd_demo_sk = customer.c_current_hdemo_sk) AND household_demographics.hd_buy_potential LIKE 'Unknown%') GROUP BY call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, customer_demographics.cd_marital_status, customer_demographics.cd_education_status ORDER BY sum(catalog_returns.cr_net_loss) DESC NULLS FIRST) rewritten_sql=SELECT `Call_Center`, `Call_Center_Name`, `Manager`, `Returns_Loss` FROM (SELECT `call_center`.`cc_call_center_id` AS `Call_Center`, `call_center`.`cc_name` AS `Call_Center_Name`, `call_center`.`cc_manager` AS `Manager`, sum(`catalog_returns`.`cr_net_loss`) AS `Returns_Loss`, sum(`catalog_returns`.`cr_net_loss`) FROM `call_center` JOIN `catalog_returns` ON (`catalog_returns`.`cr_call_center_sk` = `call_center`.`cc_call_center_sk`) JOIN `date_dim` ON ((`catalog_returns`.`cr_returned_date_sk` = `date_dim`.`d_date_sk`) AND ((`date_dim`.`d_year` = 2002) AND (`date_dim`.`d_moy` = 11))) JOIN `customer` ON (`catalog_returns`.`cr_returning_customer_sk` = `customer`.`c_customer_sk`) JOIN `customer_address` ON ((`customer_address`.`ca_address_sk` = `customer`.`c_current_addr_sk`) AND (`customer_address`.`ca_gmt_offset` = -6)) JOIN `customer_demographics` ON ((`customer_demographics`.`cd_demo_sk` = `customer`.`c_current_cdemo_sk`) AND (((`customer_demographics`.`cd_marital_status` = 'M') AND (`customer_demographics`.`cd_education_status` = 'Unknown')) OR ((`customer_demographics`.`cd_marital_status` = 'W') AND (`customer_demographics`.`cd_education_status` = 'Advanced Degree')))) JOIN `household_demographics` ON ((`household_demographics`.`hd_demo_sk` = `customer`.`c_current_hdemo_sk`) AND `household_demographics`.`hd_buy_potential` LIKE 'Unknown%') GROUP BY `call_center`.`cc_call_center_id`, `call_center`.`cc_name`, `call_center`.`cc_manager`, `customer_demographics`.`cd_marital_status`, `customer_demographics`.`cd_education_status` ORDER BY sum(`catalog_returns`.`cr_net_loss`) DESC NULLS FIRST) | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q92_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q92_explain.snap new file mode 100644 index 0000000000..537694892b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q92_explain.snap @@ -0,0 +1,33 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q92" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: Excess Discount Amount | +| | Sort: sum(web_sales.ws_ext_discount_amt) AS Excess Discount Amount ASC NULLS LAST | +| | Projection: sum(web_sales.ws_ext_discount_amt) AS Excess Discount Amount, sum(web_sales.ws_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[sum(web_sales.ws_ext_discount_amt)]] | +| | Inner Join: Filter: date_dim.d_date_sk = web_sales.ws_sold_date_sk | +| | Inner Join: Filter: item.i_item_sk = web_sales.ws_item_sk | +| | Filter: web_sales.ws_ext_discount_amt > () | +| | Subquery: | +| | Projection: Float64(1.3) * avg(web_sales.ws_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[avg(web_sales.ws_ext_discount_amt)]] | +| | Filter: web_sales.ws_item_sk = outer_ref(item.i_item_sk) AND date_dim.d_date BETWEEN Utf8("2001-01-25") AND CAST(Utf8("2001-01-25") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 90, nanoseconds: 0 }") AND date_dim.d_date_sk = web_sales.ws_sold_date_sk | +| | Cross Join: | +| | TableScan: web_sales | +| | TableScan: date_dim | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt] | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_manufact_id = Int64(914)] | +| | Filter: date_dim.d_date BETWEEN Utf8("2001-01-25") AND CAST(Utf8("2001-01-25") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 90, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT "Excess Discount Amount" FROM (SELECT sum(web_sales.ws_ext_discount_amt) AS "Excess Discount Amount", sum(web_sales.ws_ext_discount_amt) FROM web_sales JOIN item ON ((item.i_item_sk = web_sales.ws_item_sk) AND ((web_sales.ws_ext_discount_amt > (SELECT (1.3 * avg(web_sales.ws_ext_discount_amt)) FROM web_sales CROSS JOIN date_dim WHERE (((web_sales.ws_item_sk = item.i_item_sk) AND (date_dim.d_date BETWEEN '2001-01-25' AND (CAST('2001-01-25' AS DATE) + INTERVAL '90 DAYS'))) AND (date_dim.d_date_sk = web_sales.ws_sold_date_sk)))) AND (item.i_manufact_id = 914))) JOIN date_dim ON ((date_dim.d_date_sk = web_sales.ws_sold_date_sk) AND (date_dim.d_date BETWEEN '2001-01-25' AND (CAST('2001-01-25' AS DATE) + INTERVAL '90 DAYS'))) ORDER BY sum(web_sales.ws_ext_discount_amt) ASC NULLS LAST) LIMIT 100 rewritten_sql=SELECT `Excess Discount Amount` FROM (SELECT sum(`web_sales`.`ws_ext_discount_amt`) AS `Excess Discount Amount`, sum(`web_sales`.`ws_ext_discount_amt`) FROM `web_sales` JOIN `item` ON ((`item`.`i_item_sk` = `web_sales`.`ws_item_sk`) AND ((`web_sales`.`ws_ext_discount_amt` > (SELECT (1.3 * avg(`web_sales`.`ws_ext_discount_amt`)) FROM `web_sales` CROSS JOIN `date_dim` WHERE (((`web_sales`.`ws_item_sk` = `item`.`i_item_sk`) AND (`date_dim`.`d_date` BETWEEN '2001-01-25' AND (CAST(date(CAST('2001-01-25' AS TEXT), '+90 days') AS TEXT)))) AND (`date_dim`.`d_date_sk` = `web_sales`.`ws_sold_date_sk`)))) AND (`item`.`i_manufact_id` = 914))) JOIN `date_dim` ON ((`date_dim`.`d_date_sk` = `web_sales`.`ws_sold_date_sk`) AND (`date_dim`.`d_date` BETWEEN '2001-01-25' AND (CAST(date(CAST('2001-01-25' AS TEXT), '+90 days') AS TEXT)))) ORDER BY sum(`web_sales`.`ws_ext_discount_amt`) ASC NULLS LAST) LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q93_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q93_explain.snap new file mode 100644 index 0000000000..ae091194de --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q93_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q93" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: sumsales ASC NULLS LAST, t.ss_customer_sk ASC NULLS LAST | +| | Projection: t.ss_customer_sk, sum(t.act_sales) AS sumsales | +| | Aggregate: groupBy=[[t.ss_customer_sk]], aggr=[[sum(t.act_sales)]] | +| | SubqueryAlias: t | +| | Projection: store_sales.ss_customer_sk, CASE WHEN store_returns.sr_return_quantity IS NOT NULL THEN (store_sales.ss_quantity - store_returns.sr_return_quantity) * store_sales.ss_sales_price ELSE store_sales.ss_quantity * store_sales.ss_sales_price END AS act_sales | +| | Inner Join: Filter: store_returns.sr_reason_sk = reason.r_reason_sk | +| | Left Join: Filter: store_returns.sr_item_sk = store_sales.ss_item_sk AND store_returns.sr_ticket_number = store_sales.ss_ticket_number | +| | TableScan: store_sales projection=[ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_sales_price] | +| | TableScan: store_returns projection=[sr_item_sk, sr_reason_sk, sr_ticket_number, sr_return_quantity] | +| | TableScan: reason projection=[r_reason_sk], full_filters=[reason.r_reason_desc = Utf8("Did not get it on time")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT t.ss_customer_sk, sum(t.act_sales) AS sumsales FROM (SELECT store_sales.ss_customer_sk, CASE WHEN store_returns.sr_return_quantity IS NOT NULL THEN ((store_sales.ss_quantity - store_returns.sr_return_quantity) * store_sales.ss_sales_price) ELSE (store_sales.ss_quantity * store_sales.ss_sales_price) END AS act_sales FROM store_sales LEFT JOIN store_returns ON ((store_returns.sr_item_sk = store_sales.ss_item_sk) AND (store_returns.sr_ticket_number = store_sales.ss_ticket_number)) JOIN reason ON ((store_returns.sr_reason_sk = reason.r_reason_sk) AND (reason.r_reason_desc = 'Did not get it on time'))) AS t GROUP BY t.ss_customer_sk ORDER BY sumsales ASC NULLS LAST, t.ss_customer_sk ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT `t`.`ss_customer_sk`, sum(`t`.`act_sales`) AS `sumsales` FROM (SELECT `store_sales`.`ss_customer_sk`, CASE WHEN `store_returns`.`sr_return_quantity` IS NOT NULL THEN ((`store_sales`.`ss_quantity` - `store_returns`.`sr_return_quantity`) * `store_sales`.`ss_sales_price`) ELSE (`store_sales`.`ss_quantity` * `store_sales`.`ss_sales_price`) END AS `act_sales` FROM `store_sales` LEFT JOIN `store_returns` ON ((`store_returns`.`sr_item_sk` = `store_sales`.`ss_item_sk`) AND (`store_returns`.`sr_ticket_number` = `store_sales`.`ss_ticket_number`)) JOIN `reason` ON ((`store_returns`.`sr_reason_sk` = `reason`.`r_reason_sk`) AND (`reason`.`r_reason_desc` = 'Did not get it on time'))) AS `t` GROUP BY `t`.`ss_customer_sk` ORDER BY `sumsales` ASC NULLS LAST, `t`.`ss_customer_sk` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q94_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q94_explain.snap new file mode 100644 index 0000000000..6bc3c7e796 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q94_explain.snap @@ -0,0 +1,39 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q94" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: order count, total shipping cost, total net profit | +| | Sort: count(DISTINCT ws1.ws_order_number) AS order count ASC NULLS LAST | +| | Projection: count(DISTINCT ws1.ws_order_number) AS order count, sum(ws1.ws_ext_ship_cost) AS total shipping cost, sum(ws1.ws_net_profit) AS total net profit, count(DISTINCT ws1.ws_order_number) | +| | Aggregate: groupBy=[[]], aggr=[[count(DISTINCT ws1.ws_order_number), sum(ws1.ws_ext_ship_cost), sum(ws1.ws_net_profit)]] | +| | Inner Join: Filter: ws1.ws_web_site_sk = web_site.web_site_sk | +| | Inner Join: Filter: ws1.ws_ship_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: ws1.ws_ship_date_sk = date_dim.d_date_sk | +| | Filter: EXISTS () AND NOT EXISTS () | +| | Subquery: | +| | Projection: ws2.ws_sold_date_sk, ws2.ws_sold_time_sk, ws2.ws_ship_date_sk, ws2.ws_item_sk, ws2.ws_bill_customer_sk, ws2.ws_bill_cdemo_sk, ws2.ws_bill_hdemo_sk, ws2.ws_bill_addr_sk, ws2.ws_ship_customer_sk, ws2.ws_ship_cdemo_sk, ws2.ws_ship_hdemo_sk, ws2.ws_ship_addr_sk, ws2.ws_web_page_sk, ws2.ws_web_site_sk, ws2.ws_ship_mode_sk, ws2.ws_warehouse_sk, ws2.ws_promo_sk, ws2.ws_order_number, ws2.ws_quantity, ws2.ws_wholesale_cost, ws2.ws_list_price, ws2.ws_sales_price, ws2.ws_ext_discount_amt, ws2.ws_ext_sales_price, ws2.ws_ext_wholesale_cost, ws2.ws_ext_list_price, ws2.ws_ext_tax, ws2.ws_coupon_amt, ws2.ws_ext_ship_cost, ws2.ws_net_paid, ws2.ws_net_paid_inc_tax, ws2.ws_net_paid_inc_ship, ws2.ws_net_paid_inc_ship_tax, ws2.ws_net_profit | +| | Filter: outer_ref(ws1.ws_order_number) = ws2.ws_order_number AND outer_ref(ws1.ws_warehouse_sk) != ws2.ws_warehouse_sk | +| | SubqueryAlias: ws2 | +| | TableScan: web_sales | +| | Subquery: | +| | Projection: wr1.wr_returned_date_sk, wr1.wr_returned_time_sk, wr1.wr_item_sk, wr1.wr_refunded_customer_sk, wr1.wr_refunded_cdemo_sk, wr1.wr_refunded_hdemo_sk, wr1.wr_refunded_addr_sk, wr1.wr_returning_customer_sk, wr1.wr_returning_cdemo_sk, wr1.wr_returning_hdemo_sk, wr1.wr_returning_addr_sk, wr1.wr_web_page_sk, wr1.wr_reason_sk, wr1.wr_order_number, wr1.wr_return_quantity, wr1.wr_return_amt, wr1.wr_return_tax, wr1.wr_return_amt_inc_tax, wr1.wr_fee, wr1.wr_return_ship_cost, wr1.wr_refunded_cash, wr1.wr_reversed_charge, wr1.wr_account_credit, wr1.wr_net_loss | +| | Filter: outer_ref(ws1.ws_order_number) = wr1.wr_order_number | +| | SubqueryAlias: wr1 | +| | TableScan: web_returns | +| | SubqueryAlias: ws1 | +| | TableScan: web_sales projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_warehouse_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] | +| | Filter: date_dim.d_date BETWEEN Utf8("1999-4-01") AND CAST(Utf8("1999-4-01") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 60, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = Utf8("WI")] | +| | TableScan: web_site projection=[web_site_sk], full_filters=[web_site.web_company_name = Utf8("pri")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT "order count", "total shipping cost", "total net profit" FROM (SELECT count(DISTINCT ws1.ws_order_number) AS "order count", sum(ws1.ws_ext_ship_cost) AS "total shipping cost", sum(ws1.ws_net_profit) AS "total net profit", count(DISTINCT ws1.ws_order_number) FROM web_sales AS ws1 JOIN date_dim ON ((ws1.ws_ship_date_sk = date_dim.d_date_sk) AND ((EXISTS (SELECT ws2.ws_sold_date_sk, ws2.ws_sold_time_sk, ws2.ws_ship_date_sk, ws2.ws_item_sk, ws2.ws_bill_customer_sk, ws2.ws_bill_cdemo_sk, ws2.ws_bill_hdemo_sk, ws2.ws_bill_addr_sk, ws2.ws_ship_customer_sk, ws2.ws_ship_cdemo_sk, ws2.ws_ship_hdemo_sk, ws2.ws_ship_addr_sk, ws2.ws_web_page_sk, ws2.ws_web_site_sk, ws2.ws_ship_mode_sk, ws2.ws_warehouse_sk, ws2.ws_promo_sk, ws2.ws_order_number, ws2.ws_quantity, ws2.ws_wholesale_cost, ws2.ws_list_price, ws2.ws_sales_price, ws2.ws_ext_discount_amt, ws2.ws_ext_sales_price, ws2.ws_ext_wholesale_cost, ws2.ws_ext_list_price, ws2.ws_ext_tax, ws2.ws_coupon_amt, ws2.ws_ext_ship_cost, ws2.ws_net_paid, ws2.ws_net_paid_inc_tax, ws2.ws_net_paid_inc_ship, ws2.ws_net_paid_inc_ship_tax, ws2.ws_net_profit FROM web_sales AS ws2 WHERE ((ws1.ws_order_number = ws2.ws_order_number) AND (ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk))) AND NOT EXISTS (SELECT wr1.wr_returned_date_sk, wr1.wr_returned_time_sk, wr1.wr_item_sk, wr1.wr_refunded_customer_sk, wr1.wr_refunded_cdemo_sk, wr1.wr_refunded_hdemo_sk, wr1.wr_refunded_addr_sk, wr1.wr_returning_customer_sk, wr1.wr_returning_cdemo_sk, wr1.wr_returning_hdemo_sk, wr1.wr_returning_addr_sk, wr1.wr_web_page_sk, wr1.wr_reason_sk, wr1.wr_order_number, wr1.wr_return_quantity, wr1.wr_return_amt, wr1.wr_return_tax, wr1.wr_return_amt_inc_tax, wr1.wr_fee, wr1.wr_return_ship_cost, wr1.wr_refunded_cash, wr1.wr_reversed_charge, wr1.wr_account_credit, wr1.wr_net_loss FROM web_returns AS wr1 WHERE (ws1.ws_order_number = wr1.wr_order_number))) AND (date_dim.d_date BETWEEN '1999-4-01' AND (CAST('1999-4-01' AS DATE) + INTERVAL '60 DAYS')))) JOIN customer_address ON ((ws1.ws_ship_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_state = 'WI')) JOIN web_site ON ((ws1.ws_web_site_sk = web_site.web_site_sk) AND (web_site.web_company_name = 'pri')) ORDER BY count(DISTINCT ws1.ws_order_number) ASC NULLS LAST) LIMIT 100 rewritten_sql=SELECT `order count`, `total shipping cost`, `total net profit` FROM (SELECT count(DISTINCT `ws1`.`ws_order_number`) AS `order count`, sum(`ws1`.`ws_ext_ship_cost`) AS `total shipping cost`, sum(`ws1`.`ws_net_profit`) AS `total net profit`, count(DISTINCT `ws1`.`ws_order_number`) FROM `web_sales` AS `ws1` JOIN `date_dim` ON ((`ws1`.`ws_ship_date_sk` = `date_dim`.`d_date_sk`) AND ((EXISTS (SELECT `ws2`.`ws_sold_date_sk`, `ws2`.`ws_sold_time_sk`, `ws2`.`ws_ship_date_sk`, `ws2`.`ws_item_sk`, `ws2`.`ws_bill_customer_sk`, `ws2`.`ws_bill_cdemo_sk`, `ws2`.`ws_bill_hdemo_sk`, `ws2`.`ws_bill_addr_sk`, `ws2`.`ws_ship_customer_sk`, `ws2`.`ws_ship_cdemo_sk`, `ws2`.`ws_ship_hdemo_sk`, `ws2`.`ws_ship_addr_sk`, `ws2`.`ws_web_page_sk`, `ws2`.`ws_web_site_sk`, `ws2`.`ws_ship_mode_sk`, `ws2`.`ws_warehouse_sk`, `ws2`.`ws_promo_sk`, `ws2`.`ws_order_number`, `ws2`.`ws_quantity`, `ws2`.`ws_wholesale_cost`, `ws2`.`ws_list_price`, `ws2`.`ws_sales_price`, `ws2`.`ws_ext_discount_amt`, `ws2`.`ws_ext_sales_price`, `ws2`.`ws_ext_wholesale_cost`, `ws2`.`ws_ext_list_price`, `ws2`.`ws_ext_tax`, `ws2`.`ws_coupon_amt`, `ws2`.`ws_ext_ship_cost`, `ws2`.`ws_net_paid`, `ws2`.`ws_net_paid_inc_tax`, `ws2`.`ws_net_paid_inc_ship`, `ws2`.`ws_net_paid_inc_ship_tax`, `ws2`.`ws_net_profit` FROM `web_sales` AS `ws2` WHERE ((`ws1`.`ws_order_number` = `ws2`.`ws_order_number`) AND (`ws1`.`ws_warehouse_sk` <> `ws2`.`ws_warehouse_sk`))) AND NOT EXISTS (SELECT `wr1`.`wr_returned_date_sk`, `wr1`.`wr_returned_time_sk`, `wr1`.`wr_item_sk`, `wr1`.`wr_refunded_customer_sk`, `wr1`.`wr_refunded_cdemo_sk`, `wr1`.`wr_refunded_hdemo_sk`, `wr1`.`wr_refunded_addr_sk`, `wr1`.`wr_returning_customer_sk`, `wr1`.`wr_returning_cdemo_sk`, `wr1`.`wr_returning_hdemo_sk`, `wr1`.`wr_returning_addr_sk`, `wr1`.`wr_web_page_sk`, `wr1`.`wr_reason_sk`, `wr1`.`wr_order_number`, `wr1`.`wr_return_quantity`, `wr1`.`wr_return_amt`, `wr1`.`wr_return_tax`, `wr1`.`wr_return_amt_inc_tax`, `wr1`.`wr_fee`, `wr1`.`wr_return_ship_cost`, `wr1`.`wr_refunded_cash`, `wr1`.`wr_reversed_charge`, `wr1`.`wr_account_credit`, `wr1`.`wr_net_loss` FROM `web_returns` AS `wr1` WHERE (`ws1`.`ws_order_number` = `wr1`.`wr_order_number`))) AND (`date_dim`.`d_date` BETWEEN '1999-4-01' AND (CAST(date(CAST('1999-4-01' AS TEXT), '+60 days') AS TEXT))))) JOIN `customer_address` ON ((`ws1`.`ws_ship_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_state` = 'WI')) JOIN `web_site` ON ((`ws1`.`ws_web_site_sk` = `web_site`.`web_site_sk`) AND (`web_site`.`web_company_name` = 'pri')) ORDER BY count(DISTINCT `ws1`.`ws_order_number`) ASC NULLS LAST) LIMIT 100 | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q95_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q95_explain.snap new file mode 100644 index 0000000000..dc40ef140c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q95_explain.snap @@ -0,0 +1,52 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q95" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: order count, total shipping cost, total net profit | +| | Sort: count(DISTINCT ws1.ws_order_number) AS order count ASC NULLS LAST | +| | Projection: count(DISTINCT ws1.ws_order_number) AS order count, sum(ws1.ws_ext_ship_cost) AS total shipping cost, sum(ws1.ws_net_profit) AS total net profit, count(DISTINCT ws1.ws_order_number) | +| | Aggregate: groupBy=[[]], aggr=[[count(DISTINCT ws1.ws_order_number), sum(ws1.ws_ext_ship_cost), sum(ws1.ws_net_profit)]] | +| | Inner Join: Filter: ws1.ws_web_site_sk = web_site.web_site_sk | +| | Inner Join: Filter: ws1.ws_ship_addr_sk = customer_address.ca_address_sk | +| | Inner Join: Filter: ws1.ws_ship_date_sk = date_dim.d_date_sk | +| | Filter: ws1.ws_order_number IN () AND ws1.ws_order_number IN () | +| | Subquery: | +| | Projection: ws_wh.ws_order_number | +| | SubqueryAlias: ws_wh | +| | Projection: ws1.ws_order_number, ws1.ws_warehouse_sk AS wh1, ws2.ws_warehouse_sk AS wh2 | +| | Filter: ws1.ws_order_number = ws2.ws_order_number AND ws1.ws_warehouse_sk != ws2.ws_warehouse_sk | +| | Cross Join: | +| | SubqueryAlias: ws1 | +| | TableScan: web_sales | +| | SubqueryAlias: ws2 | +| | TableScan: web_sales | +| | Subquery: | +| | Projection: web_returns.wr_order_number | +| | Filter: web_returns.wr_order_number = ws_wh.ws_order_number | +| | Cross Join: | +| | TableScan: web_returns | +| | SubqueryAlias: ws_wh | +| | Projection: ws1.ws_order_number, ws1.ws_warehouse_sk AS wh1, ws2.ws_warehouse_sk AS wh2 | +| | Filter: ws1.ws_order_number = ws2.ws_order_number AND ws1.ws_warehouse_sk != ws2.ws_warehouse_sk | +| | Cross Join: | +| | SubqueryAlias: ws1 | +| | TableScan: web_sales | +| | SubqueryAlias: ws2 | +| | TableScan: web_sales | +| | SubqueryAlias: ws1 | +| | TableScan: web_sales projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] | +| | Filter: date_dim.d_date BETWEEN Utf8("2002-5-01") AND CAST(Utf8("2002-5-01") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 60, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = Utf8("MA")] | +| | TableScan: web_site projection=[web_site_sk], full_filters=[web_site.web_company_name = Utf8("pri")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT "order count", "total shipping cost", "total net profit" FROM (SELECT count(DISTINCT ws1.ws_order_number) AS "order count", sum(ws1.ws_ext_ship_cost) AS "total shipping cost", sum(ws1.ws_net_profit) AS "total net profit", count(DISTINCT ws1.ws_order_number) FROM web_sales AS ws1 JOIN date_dim ON ((ws1.ws_ship_date_sk = date_dim.d_date_sk) AND ((ws1.ws_order_number IN (SELECT ws_wh.ws_order_number FROM (SELECT ws1.ws_order_number, ws1.ws_warehouse_sk AS wh1, ws2.ws_warehouse_sk AS wh2 FROM web_sales AS ws1 CROSS JOIN web_sales AS ws2 WHERE ((ws1.ws_order_number = ws2.ws_order_number) AND (ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk))) AS ws_wh) AND ws1.ws_order_number IN (SELECT web_returns.wr_order_number FROM web_returns CROSS JOIN (SELECT ws1.ws_order_number, ws1.ws_warehouse_sk AS wh1, ws2.ws_warehouse_sk AS wh2 FROM web_sales AS ws1 CROSS JOIN web_sales AS ws2 WHERE ((ws1.ws_order_number = ws2.ws_order_number) AND (ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk))) AS ws_wh WHERE (web_returns.wr_order_number = ws_wh.ws_order_number))) AND (date_dim.d_date BETWEEN '2002-5-01' AND (CAST('2002-5-01' AS DATE) + INTERVAL '60 DAYS')))) JOIN customer_address ON ((ws1.ws_ship_addr_sk = customer_address.ca_address_sk) AND (customer_address.ca_state = 'MA')) JOIN web_site ON ((ws1.ws_web_site_sk = web_site.web_site_sk) AND (web_site.web_company_name = 'pri')) ORDER BY count(DISTINCT ws1.ws_order_number) ASC NULLS LAST) LIMIT 100 rewritten_sql=SELECT `order count`, `total shipping cost`, `total net profit` FROM (SELECT count(DISTINCT `ws1`.`ws_order_number`) AS `order count`, sum(`ws1`.`ws_ext_ship_cost`) AS `total shipping cost`, sum(`ws1`.`ws_net_profit`) AS `total net profit`, count(DISTINCT `ws1`.`ws_order_number`) FROM `web_sales` AS `ws1` JOIN `date_dim` ON ((`ws1`.`ws_ship_date_sk` = `date_dim`.`d_date_sk`) AND ((`ws1`.`ws_order_number` IN (SELECT `ws_wh`.`ws_order_number` FROM (SELECT `ws1`.`ws_order_number`, `ws1`.`ws_warehouse_sk` AS `wh1`, `ws2`.`ws_warehouse_sk` AS `wh2` FROM `web_sales` AS `ws1` CROSS JOIN `web_sales` AS `ws2` WHERE ((`ws1`.`ws_order_number` = `ws2`.`ws_order_number`) AND (`ws1`.`ws_warehouse_sk` <> `ws2`.`ws_warehouse_sk`))) AS `ws_wh`) AND `ws1`.`ws_order_number` IN (SELECT `web_returns`.`wr_order_number` FROM `web_returns` CROSS JOIN (SELECT `ws1`.`ws_order_number`, `ws1`.`ws_warehouse_sk` AS `wh1`, `ws2`.`ws_warehouse_sk` AS `wh2` FROM `web_sales` AS `ws1` CROSS JOIN `web_sales` AS `ws2` WHERE ((`ws1`.`ws_order_number` = `ws2`.`ws_order_number`) AND (`ws1`.`ws_warehouse_sk` <> `ws2`.`ws_warehouse_sk`))) AS `ws_wh` WHERE (`web_returns`.`wr_order_number` = `ws_wh`.`ws_order_number`))) AND (`date_dim`.`d_date` BETWEEN '2002-5-01' AND (CAST(date(CAST('2002-5-01' AS TEXT), '+60 days') AS TEXT))))) JOIN `customer_address` ON ((`ws1`.`ws_ship_addr_sk` = `customer_address`.`ca_address_sk`) AND (`customer_address`.`ca_state` = 'MA')) JOIN `web_site` ON ((`ws1`.`ws_web_site_sk` = `web_site`.`web_site_sk`) AND (`web_site`.`web_company_name` = 'pri')) ORDER BY count(DISTINCT `ws1`.`ws_order_number`) ASC NULLS LAST) LIMIT 100 | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q96_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q96_explain.snap new file mode 100644 index 0000000000..ab2ae106cd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q96_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q96" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: count(*) ASC NULLS LAST | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Inner Join: Filter: store_sales.ss_store_sk = store.s_store_sk | +| | Inner Join: Filter: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Inner Join: Filter: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int64(5)] | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int64(8), time_dim.t_minute >= Int64(30)] | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = Utf8("ese")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT count(*) FROM store_sales JOIN household_demographics ON ((store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk) AND (household_demographics.hd_dep_count = 5)) JOIN time_dim ON ((store_sales.ss_sold_time_sk = time_dim.t_time_sk) AND ((time_dim.t_hour = 8) AND (time_dim.t_minute >= 30))) JOIN store ON ((store_sales.ss_store_sk = store.s_store_sk) AND (store.s_store_name = 'ese')) ORDER BY count(*) ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT count(*) FROM `store_sales` JOIN `household_demographics` ON ((`store_sales`.`ss_hdemo_sk` = `household_demographics`.`hd_demo_sk`) AND (`household_demographics`.`hd_dep_count` = 5)) JOIN `time_dim` ON ((`store_sales`.`ss_sold_time_sk` = `time_dim`.`t_time_sk`) AND ((`time_dim`.`t_hour` = 8) AND (`time_dim`.`t_minute` >= 30))) JOIN `store` ON ((`store_sales`.`ss_store_sk` = `store`.`s_store_sk`) AND (`store`.`s_store_name` = 'ese')) ORDER BY count(*) ASC NULLS LAST LIMIT 100 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q97_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q97_explain.snap new file mode 100644 index 0000000000..04069c5da5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q97_explain.snap @@ -0,0 +1,32 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q97" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Projection: sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END) AS store_only, sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS catalog_only, sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS store_and_catalog | +| | Aggregate: groupBy=[[]], aggr=[[sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)]] | +| | Full Join: Filter: ssci.customer_sk = csci.customer_sk AND ssci.item_sk = csci.item_sk | +| | SubqueryAlias: ssci | +| | Projection: store_sales.ss_customer_sk AS customer_sk, store_sales.ss_item_sk AS item_sk | +| | Aggregate: groupBy=[[store_sales.ss_customer_sk, store_sales.ss_item_sk]], aggr=[[]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1211) AND Int64(1211) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| | SubqueryAlias: csci | +| | Projection: catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk | +| | Aggregate: groupBy=[[catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk]], aggr=[[]] | +| | Inner Join: Filter: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1211) AND Int64(1211) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT sum(CASE WHEN (ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL) THEN 1 ELSE 0 END) AS store_only, sum(CASE WHEN (ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL) THEN 1 ELSE 0 END) AS catalog_only, sum(CASE WHEN (ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL) THEN 1 ELSE 0 END) AS store_and_catalog FROM (SELECT store_sales.ss_customer_sk AS customer_sk, store_sales.ss_item_sk AS item_sk FROM store_sales JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_month_seq BETWEEN 1211 AND (1211 + 11))) GROUP BY store_sales.ss_customer_sk, store_sales.ss_item_sk) AS ssci FULL JOIN (SELECT catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk FROM catalog_sales JOIN date_dim ON ((catalog_sales.cs_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_month_seq BETWEEN 1211 AND (1211 + 11))) GROUP BY catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk) AS csci ON ((ssci.customer_sk = csci.customer_sk) AND (ssci.item_sk = csci.item_sk)) LIMIT 100 rewritten_sql=SELECT sum(CASE WHEN (`ssci`.`customer_sk` IS NOT NULL AND `csci`.`customer_sk` IS NULL) THEN 1 ELSE 0 END) AS `store_only`, sum(CASE WHEN (`ssci`.`customer_sk` IS NULL AND `csci`.`customer_sk` IS NOT NULL) THEN 1 ELSE 0 END) AS `catalog_only`, sum(CASE WHEN (`ssci`.`customer_sk` IS NOT NULL AND `csci`.`customer_sk` IS NOT NULL) THEN 1 ELSE 0 END) AS `store_and_catalog` FROM (SELECT `store_sales`.`ss_customer_sk` AS `customer_sk`, `store_sales`.`ss_item_sk` AS `item_sk` FROM `store_sales` JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_month_seq` BETWEEN 1211 AND (1211 + 11))) GROUP BY `store_sales`.`ss_customer_sk`, `store_sales`.`ss_item_sk`) AS `ssci` FULL JOIN (SELECT `catalog_sales`.`cs_bill_customer_sk` AS `customer_sk`, `catalog_sales`.`cs_item_sk` AS `item_sk` FROM `catalog_sales` JOIN `date_dim` ON ((`catalog_sales`.`cs_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_month_seq` BETWEEN 1211 AND (1211 + 11))) GROUP BY `catalog_sales`.`cs_bill_customer_sk`, `catalog_sales`.`cs_item_sk`) AS `csci` ON ((`ssci`.`customer_sk` = `csci`.`customer_sk`) AND (`ssci`.`item_sk` = `csci`.`item_sk`)) LIMIT 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q98_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q98_explain.snap new file mode 100644 index 0000000000..8835848c98 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q98_explain.snap @@ -0,0 +1,24 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q98" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST | +| | Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(store_sales.ss_ext_sales_price) AS itemrevenue, sum(store_sales.ss_ext_sales_price) * Int64(100) / sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS revenueratio | +| | WindowAggr: windowExpr=[[sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Inner Join: Filter: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: store_sales.ss_item_sk = item.i_item_sk | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], full_filters=[item.i_category IN ([Utf8("Shoes"), Utf8("Music"), Utf8("Men")])] | +| | Filter: date_dim.d_date BETWEEN CAST(Utf8("2000-01-05") AS Date32) AND CAST(Utf8("2000-01-05") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 30, nanoseconds: 0 }") | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(store_sales.ss_ext_sales_price) AS itemrevenue, ((sum(store_sales.ss_ext_sales_price) * 100) / sum(sum(store_sales.ss_ext_sales_price)) OVER (PARTITION BY item.i_class ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS revenueratio FROM store_sales JOIN item ON ((store_sales.ss_item_sk = item.i_item_sk) AND item.i_category IN ('Shoes', 'Music', 'Men')) JOIN date_dim ON ((store_sales.ss_sold_date_sk = date_dim.d_date_sk) AND (date_dim.d_date BETWEEN CAST('2000-01-05' AS DATE) AND (CAST('2000-01-05' AS DATE) + INTERVAL '30 DAYS'))) GROUP BY item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price ORDER BY item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST rewritten_sql=SELECT `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_category`, `item`.`i_class`, `item`.`i_current_price`, sum(`store_sales`.`ss_ext_sales_price`) AS `itemrevenue`, ((sum(`store_sales`.`ss_ext_sales_price`) * 100) / sum(sum(`store_sales`.`ss_ext_sales_price`)) OVER (PARTITION BY `item`.`i_class` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) AS `revenueratio` FROM `store_sales` JOIN `item` ON ((`store_sales`.`ss_item_sk` = `item`.`i_item_sk`) AND `item`.`i_category` IN ('Shoes', 'Music', 'Men')) JOIN `date_dim` ON ((`store_sales`.`ss_sold_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_date` BETWEEN CAST('2000-01-05' AS TEXT) AND (CAST(date(CAST('2000-01-05' AS TEXT), '+30 days') AS TEXT)))) GROUP BY `item`.`i_item_id`, `item`.`i_item_desc`, `item`.`i_category`, `item`.`i_class`, `item`.`i_current_price` ORDER BY `item`.`i_category` ASC NULLS LAST, `item`.`i_class` ASC NULLS LAST, `item`.`i_item_id` ASC NULLS LAST, `item`.`i_item_desc` ASC NULLS LAST, `revenueratio` ASC NULLS LAST | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q99_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q99_explain.snap new file mode 100644 index 0000000000..86ed0ff48f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q99_explain.snap @@ -0,0 +1,28 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q99" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) ASC NULLS LAST, ship_mode.sm_type ASC NULLS LAST, call_center.cc_name ASC NULLS LAST | +| | Projection: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), ship_mode.sm_type, call_center.cc_name, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days | +| | Aggregate: groupBy=[[substr(warehouse.w_warehouse_name, Int64(1), Int64(20)), ship_mode.sm_type, call_center.cc_name]], aggr=[[sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] | +| | Inner Join: Filter: catalog_sales.cs_ship_date_sk = date_dim.d_date_sk | +| | Inner Join: Filter: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk | +| | Inner Join: Filter: catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Inner Join: Filter: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_date_sk, cs_call_center_sk, cs_ship_mode_sk, cs_warehouse_sk] | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | TableScan: ship_mode projection=[sm_ship_mode_sk, sm_type] | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| | Filter: date_dim.d_month_seq BETWEEN Int64(1188) AND Int64(1188) + Int64(11) | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT substr("warehouse".w_warehouse_name, 1, 20), ship_mode.sm_type, call_center.cc_name, sum(CASE WHEN ((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) <= 30) THEN 1 ELSE 0 END) AS "30 days", sum(CASE WHEN (((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) > 30) AND ((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) <= 60)) THEN 1 ELSE 0 END) AS "31-60 days", sum(CASE WHEN (((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) > 60) AND ((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) <= 90)) THEN 1 ELSE 0 END) AS "61-90 days", sum(CASE WHEN (((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) > 90) AND ((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) <= 120)) THEN 1 ELSE 0 END) AS "91-120 days", sum(CASE WHEN ((catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk) > 120) THEN 1 ELSE 0 END) AS ">120 days" FROM catalog_sales JOIN "warehouse" ON (catalog_sales.cs_warehouse_sk = "warehouse".w_warehouse_sk) JOIN ship_mode ON (catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk) JOIN call_center ON (catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk) JOIN date_dim ON ((catalog_sales.cs_ship_date_sk = date_dim.d_date_sk) AND (date_dim.d_month_seq BETWEEN 1188 AND (1188 + 11))) GROUP BY substr("warehouse".w_warehouse_name, 1, 20), ship_mode.sm_type, call_center.cc_name ORDER BY substr("warehouse".w_warehouse_name, 1, 20) ASC NULLS LAST, ship_mode.sm_type ASC NULLS LAST, call_center.cc_name ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT substr(`warehouse`.`w_warehouse_name`, 1, 20), `ship_mode`.`sm_type`, `call_center`.`cc_name`, sum(CASE WHEN ((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) <= 30) THEN 1 ELSE 0 END) AS `30 days`, sum(CASE WHEN (((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) > 30) AND ((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) <= 60)) THEN 1 ELSE 0 END) AS `31-60 days`, sum(CASE WHEN (((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) > 60) AND ((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) <= 90)) THEN 1 ELSE 0 END) AS `61-90 days`, sum(CASE WHEN (((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) > 90) AND ((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) <= 120)) THEN 1 ELSE 0 END) AS `91-120 days`, sum(CASE WHEN ((`catalog_sales`.`cs_ship_date_sk` - `catalog_sales`.`cs_sold_date_sk`) > 120) THEN 1 ELSE 0 END) AS `>120 days` FROM `catalog_sales` JOIN `warehouse` ON (`catalog_sales`.`cs_warehouse_sk` = `warehouse`.`w_warehouse_sk`) JOIN `ship_mode` ON (`catalog_sales`.`cs_ship_mode_sk` = `ship_mode`.`sm_ship_mode_sk`) JOIN `call_center` ON (`catalog_sales`.`cs_call_center_sk` = `call_center`.`cc_call_center_sk`) JOIN `date_dim` ON ((`catalog_sales`.`cs_ship_date_sk` = `date_dim`.`d_date_sk`) AND (`date_dim`.`d_month_seq` BETWEEN 1188 AND (1188 + 11))) GROUP BY substr(`warehouse`.`w_warehouse_name`, 1, 20), `ship_mode`.`sm_type`, `call_center`.`cc_name` ORDER BY substr(`warehouse`.`w_warehouse_name`, 1, 20) ASC NULLS LAST, `ship_mode`.`sm_type` ASC NULLS LAST, `call_center`.`cc_name` ASC NULLS LAST LIMIT 100 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q9_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q9_explain.snap new file mode 100644 index 0000000000..9c8c87659a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__file[parquet]-sqlite[memory]_tpcds_q9_explain.snap @@ -0,0 +1,91 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q9" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: CASE WHEN () > Int64(31002) THEN () ELSE () END AS bucket1, CASE WHEN () > Int64(588) THEN () ELSE () END AS bucket2, CASE WHEN () > Int64(2456) THEN () ELSE () END AS bucket3, CASE WHEN () > Int64(21645) THEN () ELSE () END AS bucket4, CASE WHEN () > Int64(20553) THEN () ELSE () END AS bucket5 | +| | Subquery: | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(1) AND Int64(20) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(1) AND Int64(20) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(1) AND Int64(20) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(21) AND Int64(40) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(21) AND Int64(40) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(21) AND Int64(40) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(41) AND Int64(60) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(41) AND Int64(60) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(41) AND Int64(60) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(61) AND Int64(80) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(61) AND Int64(80) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(61) AND Int64(80) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(81) AND Int64(100) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(81) AND Int64(100) | +| | TableScan: store_sales | +| | Subquery: | +| | Projection: avg(store_sales.ss_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | Filter: store_sales.ss_quantity BETWEEN Int64(81) AND Int64(100) | +| | TableScan: store_sales | +| | TableScan: reason projection=[], full_filters=[reason.r_reason_sk = Int64(1)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT CASE WHEN ((SELECT count(*) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 1 AND 20)) > 31002) THEN (SELECT avg(store_sales.ss_ext_discount_amt) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 1 AND 20)) ELSE (SELECT avg(store_sales.ss_net_profit) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 1 AND 20)) END AS bucket1, CASE WHEN ((SELECT count(*) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 21 AND 40)) > 588) THEN (SELECT avg(store_sales.ss_ext_discount_amt) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 21 AND 40)) ELSE (SELECT avg(store_sales.ss_net_profit) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 21 AND 40)) END AS bucket2, CASE WHEN ((SELECT count(*) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 41 AND 60)) > 2456) THEN (SELECT avg(store_sales.ss_ext_discount_amt) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 41 AND 60)) ELSE (SELECT avg(store_sales.ss_net_profit) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 41 AND 60)) END AS bucket3, CASE WHEN ((SELECT count(*) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 61 AND 80)) > 21645) THEN (SELECT avg(store_sales.ss_ext_discount_amt) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 61 AND 80)) ELSE (SELECT avg(store_sales.ss_net_profit) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 61 AND 80)) END AS bucket4, CASE WHEN ((SELECT count(*) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 81 AND 100)) > 20553) THEN (SELECT avg(store_sales.ss_ext_discount_amt) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 81 AND 100)) ELSE (SELECT avg(store_sales.ss_net_profit) FROM store_sales WHERE (store_sales.ss_quantity BETWEEN 81 AND 100)) END AS bucket5 FROM reason WHERE (reason.r_reason_sk = 1) rewritten_sql=SELECT CASE WHEN ((SELECT count(*) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 1 AND 20)) > 31002) THEN (SELECT avg(`store_sales`.`ss_ext_discount_amt`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 1 AND 20)) ELSE (SELECT avg(`store_sales`.`ss_net_profit`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 1 AND 20)) END AS `bucket1`, CASE WHEN ((SELECT count(*) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 21 AND 40)) > 588) THEN (SELECT avg(`store_sales`.`ss_ext_discount_amt`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 21 AND 40)) ELSE (SELECT avg(`store_sales`.`ss_net_profit`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 21 AND 40)) END AS `bucket2`, CASE WHEN ((SELECT count(*) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 41 AND 60)) > 2456) THEN (SELECT avg(`store_sales`.`ss_ext_discount_amt`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 41 AND 60)) ELSE (SELECT avg(`store_sales`.`ss_net_profit`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 41 AND 60)) END AS `bucket3`, CASE WHEN ((SELECT count(*) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 61 AND 80)) > 21645) THEN (SELECT avg(`store_sales`.`ss_ext_discount_amt`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 61 AND 80)) ELSE (SELECT avg(`store_sales`.`ss_net_profit`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 61 AND 80)) END AS `bucket4`, CASE WHEN ((SELECT count(*) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 81 AND 100)) > 20553) THEN (SELECT avg(`store_sales`.`ss_ext_discount_amt`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 81 AND 100)) ELSE (SELECT avg(`store_sales`.`ss_net_profit`) FROM `store_sales` WHERE (`store_sales`.`ss_quantity` BETWEEN 81 AND 100)) END AS `bucket5` FROM `reason` WHERE (`reason`.`r_reason_sk` = 1) | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q10_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q10_explain.snap new file mode 100644 index 0000000000..a02e9db985 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q10_explain.snap @@ -0,0 +1,26 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q10" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=20 | +| | Sort: revenue DESC NULLS FIRST | +| | Projection: customer.c_custkey, customer.c_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue, customer.c_acctbal, nation.n_name, customer.c_address, customer.c_phone, customer.c_comment | +| | Aggregate: groupBy=[[customer.c_custkey, customer.c_name, customer.c_acctbal, customer.c_phone, nation.n_name, customer.c_address, customer.c_comment]], aggr=[[sum(lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount))]] | +| | Inner Join: Filter: customer.c_nationkey = nation.n_nationkey | +| | Inner Join: Filter: lineitem.l_orderkey = orders.o_orderkey | +| | Inner Join: Filter: customer.c_custkey = orders.o_custkey | +| | TableScan: customer projection=[c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_comment] | +| | Filter: orders.o_orderdate >= CAST(Utf8("1993-10-01") AS Date32) AND orders.o_orderdate < CAST(Utf8("1994-01-01") AS Date32) | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate] | +| | TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount], full_filters=[lineitem.l_returnflag = Utf8("R")] | +| | TableScan: nation projection=[n_nationkey, n_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT customer.c_custkey, customer.c_name, sum((lineitem.l_extendedprice * (1 - lineitem.l_discount))) AS revenue, customer.c_acctbal, nation.n_name, customer.c_address, customer.c_phone, customer.c_comment FROM customer JOIN orders ON ((customer.c_custkey = orders.o_custkey) AND ((orders.o_orderdate >= CAST('1993-10-01' AS DATE)) AND (orders.o_orderdate < CAST('1994-01-01' AS DATE)))) JOIN lineitem ON ((lineitem.l_orderkey = orders.o_orderkey) AND (lineitem.l_returnflag = 'R')) JOIN nation ON (customer.c_nationkey = nation.n_nationkey) GROUP BY customer.c_custkey, customer.c_name, customer.c_acctbal, customer.c_phone, nation.n_name, customer.c_address, customer.c_comment ORDER BY revenue DESC NULLS FIRST LIMIT 20 rewritten_sql=SELECT "customer"."c_custkey", "customer"."c_name", sum(("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount"))) AS "revenue", "customer"."c_acctbal", "nation"."n_name", "customer"."c_address", "customer"."c_phone", "customer"."c_comment" FROM "customer" JOIN "orders" ON (("customer"."c_custkey" = "orders"."o_custkey") AND (("orders"."o_orderdate" >= CAST('1993-10-01' AS DATE)) AND ("orders"."o_orderdate" < CAST('1994-01-01' AS DATE)))) JOIN "lineitem" ON (("lineitem"."l_orderkey" = "orders"."o_orderkey") AND ("lineitem"."l_returnflag" = 'R')) JOIN "nation" ON ("customer"."c_nationkey" = "nation"."n_nationkey") GROUP BY "customer"."c_custkey", "customer"."c_name", "customer"."c_acctbal", "customer"."c_phone", "nation"."n_name", "customer"."c_address", "customer"."c_comment" ORDER BY "revenue" DESC NULLS FIRST LIMIT 20 | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q11_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q11_explain.snap new file mode 100644 index 0000000000..f6a1ab9bb1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q11_explain.snap @@ -0,0 +1,32 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q11" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: value DESC NULLS FIRST | +| | Projection: partsupp.ps_partkey, sum(partsupp.ps_supplycost * partsupp.ps_availqty) AS value | +| | Filter: sum(partsupp.ps_supplycost * partsupp.ps_availqty) > () | +| | Subquery: | +| | Projection: sum(partsupp.ps_supplycost * partsupp.ps_availqty) * Float64(0.0001) | +| | Aggregate: groupBy=[[]], aggr=[[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]] | +| | Filter: partsupp.ps_suppkey = supplier.s_suppkey AND supplier.s_nationkey = nation.n_nationkey AND nation.n_name = Utf8("GERMANY") | +| | Cross Join: | +| | Cross Join: | +| | TableScan: partsupp | +| | TableScan: supplier | +| | TableScan: nation | +| | Aggregate: groupBy=[[partsupp.ps_partkey]], aggr=[[sum(partsupp.ps_supplycost * partsupp.ps_availqty)]] | +| | Inner Join: Filter: supplier.s_nationkey = nation.n_nationkey | +| | Inner Join: Filter: partsupp.ps_suppkey = supplier.s_suppkey | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_availqty, ps_supplycost] | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | TableScan: nation projection=[n_nationkey], full_filters=[nation.n_name = Utf8("GERMANY")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT partsupp.ps_partkey, sum((partsupp.ps_supplycost * partsupp.ps_availqty)) AS "value" FROM partsupp JOIN supplier ON (partsupp.ps_suppkey = supplier.s_suppkey) JOIN nation ON ((supplier.s_nationkey = nation.n_nationkey) AND (nation.n_name = 'GERMANY')) GROUP BY partsupp.ps_partkey HAVING (sum((partsupp.ps_supplycost * partsupp.ps_availqty)) > (SELECT (sum((partsupp.ps_supplycost * partsupp.ps_availqty)) * 0.0001) FROM partsupp CROSS JOIN supplier CROSS JOIN nation WHERE (((partsupp.ps_suppkey = supplier.s_suppkey) AND (supplier.s_nationkey = nation.n_nationkey)) AND (nation.n_name = 'GERMANY')))) ORDER BY "value" DESC NULLS FIRST rewritten_sql=SELECT "partsupp"."ps_partkey", sum(("partsupp"."ps_supplycost" * "partsupp"."ps_availqty")) AS "value" FROM "partsupp" JOIN "supplier" ON ("partsupp"."ps_suppkey" = "supplier"."s_suppkey") JOIN "nation" ON (("supplier"."s_nationkey" = "nation"."n_nationkey") AND ("nation"."n_name" = 'GERMANY')) GROUP BY "partsupp"."ps_partkey" HAVING (sum(("partsupp"."ps_supplycost" * "partsupp"."ps_availqty")) > (SELECT (sum(("partsupp"."ps_supplycost" * "partsupp"."ps_availqty")) * 0.0001) FROM "partsupp" CROSS JOIN "supplier" CROSS JOIN "nation" WHERE ((("partsupp"."ps_suppkey" = "supplier"."s_suppkey") AND ("supplier"."s_nationkey" = "nation"."n_nationkey")) AND ("nation"."n_name" = 'GERMANY')))) ORDER BY "value" DESC NULLS FIRST | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q12_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q12_explain.snap new file mode 100644 index 0000000000..b3799b0974 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q12_explain.snap @@ -0,0 +1,21 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q12" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: lineitem.l_shipmode ASC NULLS LAST | +| | Projection: lineitem.l_shipmode, sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS high_line_count, sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END) AS low_line_count | +| | Aggregate: groupBy=[[lineitem.l_shipmode]], aggr=[[sum(CASE WHEN orders.o_orderpriority = Utf8("1-URGENT") OR orders.o_orderpriority = Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN orders.o_orderpriority != Utf8("1-URGENT") AND orders.o_orderpriority != Utf8("2-HIGH") THEN Int64(1) ELSE Int64(0) END)]] | +| | Inner Join: Filter: lineitem.l_orderkey = orders.o_orderkey | +| | Filter: lineitem.l_receiptdate >= CAST(Utf8("1994-01-01") AS Date32) AND lineitem.l_receiptdate < CAST(Utf8("1995-01-01") AS Date32) | +| | TableScan: lineitem projection=[l_orderkey, l_receiptdate, l_shipmode], full_filters=[lineitem.l_shipmode IN ([Utf8("MAIL"), Utf8("SHIP")]), lineitem.l_commitdate < lineitem.l_receiptdate, lineitem.l_shipdate < lineitem.l_commitdate] | +| | TableScan: orders projection=[o_orderkey, o_orderpriority] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT lineitem.l_shipmode, sum(CASE WHEN ((orders.o_orderpriority = '1-URGENT') OR (orders.o_orderpriority = '2-HIGH')) THEN 1 ELSE 0 END) AS high_line_count, sum(CASE WHEN ((orders.o_orderpriority <> '1-URGENT') AND (orders.o_orderpriority <> '2-HIGH')) THEN 1 ELSE 0 END) AS low_line_count FROM lineitem JOIN orders ON ((lineitem.l_orderkey = orders.o_orderkey) AND (((((lineitem.l_receiptdate >= CAST('1994-01-01' AS DATE)) AND (lineitem.l_receiptdate < CAST('1995-01-01' AS DATE))) AND lineitem.l_shipmode IN ('MAIL', 'SHIP')) AND (lineitem.l_commitdate < lineitem.l_receiptdate)) AND (lineitem.l_shipdate < lineitem.l_commitdate))) GROUP BY lineitem.l_shipmode ORDER BY lineitem.l_shipmode ASC NULLS LAST rewritten_sql=SELECT "lineitem"."l_shipmode", sum(CASE WHEN (("orders"."o_orderpriority" = '1-URGENT') OR ("orders"."o_orderpriority" = '2-HIGH')) THEN 1 ELSE 0 END) AS "high_line_count", sum(CASE WHEN (("orders"."o_orderpriority" <> '1-URGENT') AND ("orders"."o_orderpriority" <> '2-HIGH')) THEN 1 ELSE 0 END) AS "low_line_count" FROM "lineitem" JOIN "orders" ON (("lineitem"."l_orderkey" = "orders"."o_orderkey") AND ((((("lineitem"."l_receiptdate" >= CAST('1994-01-01' AS DATE)) AND ("lineitem"."l_receiptdate" < CAST('1995-01-01' AS DATE))) AND "lineitem"."l_shipmode" IN ('MAIL', 'SHIP')) AND ("lineitem"."l_commitdate" < "lineitem"."l_receiptdate")) AND ("lineitem"."l_shipdate" < "lineitem"."l_commitdate"))) GROUP BY "lineitem"."l_shipmode" ORDER BY "lineitem"."l_shipmode" ASC NULLS LAST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q13_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q13_explain.snap new file mode 100644 index 0000000000..9dc9ea0f53 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q13_explain.snap @@ -0,0 +1,23 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q13" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: custdist DESC NULLS FIRST, c_orders.c_count DESC NULLS FIRST | +| | Projection: c_orders.c_count, count(*) AS custdist | +| | Aggregate: groupBy=[[c_orders.c_count]], aggr=[[count(*)]] | +| | SubqueryAlias: c_orders | +| | Projection: count(orders.o_orderkey) AS c_count | +| | Aggregate: groupBy=[[customer.c_custkey]], aggr=[[count(orders.o_orderkey)]] | +| | Left Join: Filter: customer.c_custkey = orders.o_custkey | +| | TableScan: customer projection=[c_custkey] | +| | TableScan: orders projection=[o_orderkey, o_custkey], full_filters=[orders.o_comment NOT LIKE Utf8("%special%requests%")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT c_orders.c_count, count(*) AS custdist FROM (SELECT count(orders.o_orderkey) AS c_count FROM customer LEFT JOIN orders ON ((customer.c_custkey = orders.o_custkey) AND orders.o_comment NOT LIKE '%special%requests%') GROUP BY customer.c_custkey) AS c_orders GROUP BY c_orders.c_count ORDER BY custdist DESC NULLS FIRST, c_orders.c_count DESC NULLS FIRST rewritten_sql=SELECT "c_orders"."c_count", count(*) AS "custdist" FROM (SELECT count("orders"."o_orderkey") AS "c_count" FROM "customer" LEFT JOIN "orders" ON (("customer"."c_custkey" = "orders"."o_custkey") AND "orders"."o_comment" NOT LIKE '%special%requests%') GROUP BY "customer"."c_custkey") AS "c_orders" GROUP BY "c_orders"."c_count" ORDER BY "custdist" DESC NULLS FIRST, "c_orders"."c_count" DESC NULLS FIRST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q14_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q14_explain.snap new file mode 100644 index 0000000000..40234d43d8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q14_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q14" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: Float64(100) * sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * Int64(1) - lineitem.l_discount ELSE Int64(0) END) / sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS promo_revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(CASE WHEN part.p_type LIKE Utf8("PROMO%") THEN lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount) ELSE Int64(0) END), sum(lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount))]] | +| | Inner Join: Filter: lineitem.l_partkey = part.p_partkey | +| | Filter: lineitem.l_shipdate >= CAST(Utf8("1995-09-01") AS Date32) AND lineitem.l_shipdate < CAST(Utf8("1995-10-01") AS Date32) | +| | TableScan: lineitem projection=[l_partkey, l_extendedprice, l_discount, l_shipdate] | +| | TableScan: part projection=[p_partkey, p_type] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT ((100.0 * sum(CASE WHEN "part".p_type LIKE 'PROMO%' THEN (lineitem.l_extendedprice * (1 - lineitem.l_discount)) ELSE 0 END)) / sum((lineitem.l_extendedprice * (1 - lineitem.l_discount)))) AS promo_revenue FROM lineitem JOIN "part" ON ((lineitem.l_partkey = "part".p_partkey) AND ((lineitem.l_shipdate >= CAST('1995-09-01' AS DATE)) AND (lineitem.l_shipdate < CAST('1995-10-01' AS DATE)))) rewritten_sql=SELECT ((100.0 * sum(CASE WHEN "part"."p_type" LIKE 'PROMO%' THEN ("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount")) ELSE 0 END)) // sum(("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount")))) AS "promo_revenue" FROM "lineitem" JOIN "part" ON (("lineitem"."l_partkey" = "part"."p_partkey") AND (("lineitem"."l_shipdate" >= CAST('1995-09-01' AS DATE)) AND ("lineitem"."l_shipdate" < CAST('1995-10-01' AS DATE)))) | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q16_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q16_explain.snap new file mode 100644 index 0000000000..2a46b09b25 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q16_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q16" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: supplier_cnt DESC NULLS FIRST, part.p_brand ASC NULLS LAST, part.p_type ASC NULLS LAST, part.p_size ASC NULLS LAST | +| | Projection: part.p_brand, part.p_type, part.p_size, count(DISTINCT partsupp.ps_suppkey) AS supplier_cnt | +| | Aggregate: groupBy=[[part.p_brand, part.p_type, part.p_size]], aggr=[[count(DISTINCT partsupp.ps_suppkey)]] | +| | Inner Join: Filter: part.p_partkey = partsupp.ps_partkey | +| | Filter: partsupp.ps_suppkey NOT IN () | +| | Subquery: | +| | Projection: supplier.s_suppkey | +| | Filter: supplier.s_comment LIKE Utf8("%Customer%Complaints%") | +| | TableScan: supplier | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey] | +| | TableScan: part projection=[p_partkey, p_brand, p_type, p_size], full_filters=[part.p_brand != Utf8("Brand#45"), part.p_type NOT LIKE Utf8("MEDIUM POLISHED%"), part.p_size IN ([Int64(49), Int64(14), Int64(23), Int64(45), Int64(19), Int64(3), Int64(36), Int64(9)])] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT "part".p_brand, "part".p_type, "part".p_size, count(DISTINCT partsupp.ps_suppkey) AS supplier_cnt FROM partsupp JOIN "part" ON (("part".p_partkey = partsupp.ps_partkey) AND (((partsupp.ps_suppkey NOT IN (SELECT supplier.s_suppkey FROM supplier WHERE supplier.s_comment LIKE '%Customer%Complaints%') AND ("part".p_brand <> 'Brand#45')) AND "part".p_type NOT LIKE 'MEDIUM POLISHED%') AND "part".p_size IN (49, 14, 23, 45, 19, 3, 36, 9))) GROUP BY "part".p_brand, "part".p_type, "part".p_size ORDER BY supplier_cnt DESC NULLS FIRST, "part".p_brand ASC NULLS LAST, "part".p_type ASC NULLS LAST, "part".p_size ASC NULLS LAST rewritten_sql=SELECT "part"."p_brand", "part"."p_type", "part"."p_size", count(DISTINCT "partsupp"."ps_suppkey") AS "supplier_cnt" FROM "partsupp" JOIN "part" ON (("part"."p_partkey" = "partsupp"."ps_partkey") AND ((("partsupp"."ps_suppkey" NOT IN (SELECT "supplier"."s_suppkey" FROM "supplier" WHERE "supplier"."s_comment" LIKE '%Customer%Complaints%') AND ("part"."p_brand" <> 'Brand#45')) AND "part"."p_type" NOT LIKE 'MEDIUM POLISHED%') AND "part"."p_size" IN (49, 14, 23, 45, 19, 3, 36, 9))) GROUP BY "part"."p_brand", "part"."p_type", "part"."p_size" ORDER BY "supplier_cnt" DESC NULLS FIRST, "part"."p_brand" ASC NULLS LAST, "part"."p_type" ASC NULLS LAST, "part"."p_size" ASC NULLS LAST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q17_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q17_explain.snap new file mode 100644 index 0000000000..f87cc72bf5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q17_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q17" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: sum(lineitem.l_extendedprice) / Float64(7) AS avg_yearly | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice)]] | +| | Inner Join: Filter: part.p_partkey = lineitem.l_partkey | +| | Filter: lineitem.l_quantity < () | +| | Subquery: | +| | Projection: Float64(0.2) * avg(lineitem.l_quantity) | +| | Aggregate: groupBy=[[]], aggr=[[avg(lineitem.l_quantity)]] | +| | Filter: lineitem.l_partkey = outer_ref(part.p_partkey) | +| | TableScan: lineitem | +| | TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice] | +| | TableScan: part projection=[p_partkey], full_filters=[part.p_brand = Utf8("Brand#23"), part.p_container = Utf8("MED BOX")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT (sum(lineitem.l_extendedprice) / 7.0) AS avg_yearly FROM lineitem JOIN "part" ON (("part".p_partkey = lineitem.l_partkey) AND (((lineitem.l_quantity < (SELECT (0.2 * avg(lineitem.l_quantity)) FROM lineitem WHERE (lineitem.l_partkey = "part".p_partkey))) AND ("part".p_brand = 'Brand#23')) AND ("part".p_container = 'MED BOX'))) rewritten_sql=SELECT (sum("lineitem"."l_extendedprice") // 7.0) AS "avg_yearly" FROM "lineitem" JOIN "part" ON (("part"."p_partkey" = "lineitem"."l_partkey") AND ((("lineitem"."l_quantity" < (SELECT (0.2 * avg("lineitem"."l_quantity")) FROM "lineitem" WHERE ("lineitem"."l_partkey" = "part"."p_partkey"))) AND ("part"."p_brand" = 'Brand#23')) AND ("part"."p_container" = 'MED BOX'))) | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q18_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q18_explain.snap new file mode 100644 index 0000000000..9586e8f61b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q18_explain.snap @@ -0,0 +1,28 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q18" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: orders.o_totalprice DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST | +| | Projection: customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice, sum(lineitem.l_quantity) | +| | Aggregate: groupBy=[[customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice]], aggr=[[sum(lineitem.l_quantity)]] | +| | Inner Join: Filter: orders.o_orderkey = lineitem.l_orderkey | +| | Inner Join: Filter: customer.c_custkey = orders.o_custkey | +| | TableScan: customer projection=[c_custkey, c_name] | +| | Filter: orders.o_orderkey IN () | +| | Subquery: | +| | Projection: lineitem.l_orderkey | +| | Filter: sum(lineitem.l_quantity) > Int64(300) | +| | Aggregate: groupBy=[[lineitem.l_orderkey]], aggr=[[sum(lineitem.l_quantity)]] | +| | TableScan: lineitem | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_totalprice, o_orderdate] | +| | TableScan: lineitem projection=[l_orderkey, l_quantity] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice, sum(lineitem.l_quantity) FROM customer JOIN orders ON ((customer.c_custkey = orders.o_custkey) AND orders.o_orderkey IN (SELECT lineitem.l_orderkey FROM lineitem GROUP BY lineitem.l_orderkey HAVING (sum(lineitem.l_quantity) > 300))) JOIN lineitem ON (orders.o_orderkey = lineitem.l_orderkey) GROUP BY customer.c_name, customer.c_custkey, orders.o_orderkey, orders.o_orderdate, orders.o_totalprice ORDER BY orders.o_totalprice DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST rewritten_sql=SELECT "customer"."c_name", "customer"."c_custkey", "orders"."o_orderkey", "orders"."o_orderdate", "orders"."o_totalprice", sum("lineitem"."l_quantity") FROM "customer" JOIN "orders" ON (("customer"."c_custkey" = "orders"."o_custkey") AND "orders"."o_orderkey" IN (SELECT "lineitem"."l_orderkey" FROM "lineitem" GROUP BY "lineitem"."l_orderkey" HAVING (sum("lineitem"."l_quantity") > 300))) JOIN "lineitem" ON ("orders"."o_orderkey" = "lineitem"."l_orderkey") GROUP BY "customer"."c_name", "customer"."c_custkey", "orders"."o_orderkey", "orders"."o_orderdate", "orders"."o_totalprice" ORDER BY "orders"."o_totalprice" DESC NULLS FIRST, "orders"."o_orderdate" ASC NULLS LAST | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q19_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q19_explain.snap new file mode 100644 index 0000000000..2851c533bb --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q19_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q19" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount))]] | +| | Inner Join: Filter: part.p_partkey = lineitem.l_partkey AND part.p_brand = Utf8("Brand#12") AND part.p_container IN ([Utf8("SM CASE"), Utf8("SM BOX"), Utf8("SM PACK"), Utf8("SM PKG")]) AND lineitem.l_quantity >= Int64(1) AND lineitem.l_quantity <= Int64(1) + Int64(10) AND part.p_size BETWEEN Int64(1) AND Int64(5) AND lineitem.l_shipmode IN ([Utf8("AIR"), Utf8("AIR REG")]) AND lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON") OR part.p_partkey = lineitem.l_partkey AND part.p_brand = Utf8("Brand#23") AND part.p_container IN ([Utf8("MED BAG"), Utf8("MED BOX"), Utf8("MED PKG"), Utf8("MED PACK")]) AND lineitem.l_quantity >= Int64(10) AND lineitem.l_quantity <= Int64(10) + Int64(10) AND part.p_size BETWEEN Int64(1) AND Int64(10) AND lineitem.l_shipmode IN ([Utf8("AIR"), Utf8("AIR REG")]) AND lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON") OR part.p_partkey = lineitem.l_partkey AND part.p_brand = Utf8("Brand#34") AND part.p_container IN ([Utf8("LG CASE"), Utf8("LG BOX"), Utf8("LG PACK"), Utf8("LG PKG")]) AND lineitem.l_quantity >= Int64(20) AND lineitem.l_quantity <= Int64(20) + Int64(10) AND part.p_size BETWEEN Int64(1) AND Int64(15) AND lineitem.l_shipmode IN ([Utf8("AIR"), Utf8("AIR REG")]) AND lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON") | +| | TableScan: lineitem projection=[l_partkey, l_quantity, l_extendedprice, l_discount, l_shipinstruct, l_shipmode], full_filters=[lineitem.l_quantity >= Int64(1) AND lineitem.l_quantity <= Int64(1) + Int64(10) AND lineitem.l_shipmode IN ([Utf8("AIR"), Utf8("AIR REG")]) AND lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON") OR lineitem.l_quantity >= Int64(10) AND lineitem.l_quantity <= Int64(10) + Int64(10) AND lineitem.l_shipmode IN ([Utf8("AIR"), Utf8("AIR REG")]) AND lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON") OR lineitem.l_quantity >= Int64(20) AND lineitem.l_quantity <= Int64(20) + Int64(10) AND lineitem.l_shipmode IN ([Utf8("AIR"), Utf8("AIR REG")]) AND lineitem.l_shipinstruct = Utf8("DELIVER IN PERSON")] | +| | Filter: part.p_brand = Utf8("Brand#12") AND part.p_container IN ([Utf8("SM CASE"), Utf8("SM BOX"), Utf8("SM PACK"), Utf8("SM PKG")]) AND part.p_size BETWEEN Int64(1) AND Int64(5) OR part.p_brand = Utf8("Brand#23") AND part.p_container IN ([Utf8("MED BAG"), Utf8("MED BOX"), Utf8("MED PKG"), Utf8("MED PACK")]) AND part.p_size BETWEEN Int64(1) AND Int64(10) OR part.p_brand = Utf8("Brand#34") AND part.p_container IN ([Utf8("LG CASE"), Utf8("LG BOX"), Utf8("LG PACK"), Utf8("LG PKG")]) AND part.p_size BETWEEN Int64(1) AND Int64(15) | +| | TableScan: part projection=[p_partkey, p_brand, p_size, p_container] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT sum((lineitem.l_extendedprice * (1 - lineitem.l_discount))) AS revenue FROM lineitem JOIN "part" ON ((((((((((("part".p_partkey = lineitem.l_partkey) AND ("part".p_brand = 'Brand#12')) AND "part".p_container IN ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')) AND (lineitem.l_quantity >= 1)) AND (lineitem.l_quantity <= (1 + 10))) AND ("part".p_size BETWEEN 1 AND 5)) AND lineitem.l_shipmode IN ('AIR', 'AIR REG')) AND (lineitem.l_shipinstruct = 'DELIVER IN PERSON')) OR (((((((("part".p_partkey = lineitem.l_partkey) AND ("part".p_brand = 'Brand#23')) AND "part".p_container IN ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')) AND (lineitem.l_quantity >= 10)) AND (lineitem.l_quantity <= (10 + 10))) AND ("part".p_size BETWEEN 1 AND 10)) AND lineitem.l_shipmode IN ('AIR', 'AIR REG')) AND (lineitem.l_shipinstruct = 'DELIVER IN PERSON'))) OR (((((((("part".p_partkey = lineitem.l_partkey) AND ("part".p_brand = 'Brand#34')) AND "part".p_container IN ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')) AND (lineitem.l_quantity >= 20)) AND (lineitem.l_quantity <= (20 + 10))) AND ("part".p_size BETWEEN 1 AND 15)) AND lineitem.l_shipmode IN ('AIR', 'AIR REG')) AND (lineitem.l_shipinstruct = 'DELIVER IN PERSON'))) AND (((((((lineitem.l_quantity >= 1) AND (lineitem.l_quantity <= (1 + 10))) AND lineitem.l_shipmode IN ('AIR', 'AIR REG')) AND (lineitem.l_shipinstruct = 'DELIVER IN PERSON')) OR ((((lineitem.l_quantity >= 10) AND (lineitem.l_quantity <= (10 + 10))) AND lineitem.l_shipmode IN ('AIR', 'AIR REG')) AND (lineitem.l_shipinstruct = 'DELIVER IN PERSON'))) OR ((((lineitem.l_quantity >= 20) AND (lineitem.l_quantity <= (20 + 10))) AND lineitem.l_shipmode IN ('AIR', 'AIR REG')) AND (lineitem.l_shipinstruct = 'DELIVER IN PERSON'))) AND ((((("part".p_brand = 'Brand#12') AND "part".p_container IN ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')) AND ("part".p_size BETWEEN 1 AND 5)) OR ((("part".p_brand = 'Brand#23') AND "part".p_container IN ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')) AND ("part".p_size BETWEEN 1 AND 10))) OR ((("part".p_brand = 'Brand#34') AND "part".p_container IN ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')) AND ("part".p_size BETWEEN 1 AND 15))))) rewritten_sql=SELECT sum(("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount"))) AS "revenue" FROM "lineitem" JOIN "part" ON ((((((((((("part"."p_partkey" = "lineitem"."l_partkey") AND ("part"."p_brand" = 'Brand#12')) AND "part"."p_container" IN ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')) AND ("lineitem"."l_quantity" >= 1)) AND ("lineitem"."l_quantity" <= (1 + 10))) AND ("part"."p_size" BETWEEN 1 AND 5)) AND "lineitem"."l_shipmode" IN ('AIR', 'AIR REG')) AND ("lineitem"."l_shipinstruct" = 'DELIVER IN PERSON')) OR (((((((("part"."p_partkey" = "lineitem"."l_partkey") AND ("part"."p_brand" = 'Brand#23')) AND "part"."p_container" IN ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')) AND ("lineitem"."l_quantity" >= 10)) AND ("lineitem"."l_quantity" <= (10 + 10))) AND ("part"."p_size" BETWEEN 1 AND 10)) AND "lineitem"."l_shipmode" IN ('AIR', 'AIR REG')) AND ("lineitem"."l_shipinstruct" = 'DELIVER IN PERSON'))) OR (((((((("part"."p_partkey" = "lineitem"."l_partkey") AND ("part"."p_brand" = 'Brand#34')) AND "part"."p_container" IN ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')) AND ("lineitem"."l_quantity" >= 20)) AND ("lineitem"."l_quantity" <= (20 + 10))) AND ("part"."p_size" BETWEEN 1 AND 15)) AND "lineitem"."l_shipmode" IN ('AIR', 'AIR REG')) AND ("lineitem"."l_shipinstruct" = 'DELIVER IN PERSON'))) AND ((((((("lineitem"."l_quantity" >= 1) AND ("lineitem"."l_quantity" <= (1 + 10))) AND "lineitem"."l_shipmode" IN ('AIR', 'AIR REG')) AND ("lineitem"."l_shipinstruct" = 'DELIVER IN PERSON')) OR (((("lineitem"."l_quantity" >= 10) AND ("lineitem"."l_quantity" <= (10 + 10))) AND "lineitem"."l_shipmode" IN ('AIR', 'AIR REG')) AND ("lineitem"."l_shipinstruct" = 'DELIVER IN PERSON'))) OR (((("lineitem"."l_quantity" >= 20) AND ("lineitem"."l_quantity" <= (20 + 10))) AND "lineitem"."l_shipmode" IN ('AIR', 'AIR REG')) AND ("lineitem"."l_shipinstruct" = 'DELIVER IN PERSON'))) AND ((((("part"."p_brand" = 'Brand#12') AND "part"."p_container" IN ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')) AND ("part"."p_size" BETWEEN 1 AND 5)) OR ((("part"."p_brand" = 'Brand#23') AND "part"."p_container" IN ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')) AND ("part"."p_size" BETWEEN 1 AND 10))) OR ((("part"."p_brand" = 'Brand#34') AND "part"."p_container" IN ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')) AND ("part"."p_size" BETWEEN 1 AND 15))))) | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q1_explain.snap new file mode 100644 index 0000000000..939293b676 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q1_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q1" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: lineitem.l_returnflag ASC NULLS LAST, lineitem.l_linestatus ASC NULLS LAST | +| | Projection: lineitem.l_returnflag, lineitem.l_linestatus, sum(lineitem.l_quantity) AS sum_qty, sum(lineitem.l_extendedprice) AS sum_base_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS sum_disc_price, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount * Int64(1) + lineitem.l_tax) AS sum_charge, avg(lineitem.l_quantity) AS avg_qty, avg(lineitem.l_extendedprice) AS avg_price, avg(lineitem.l_discount) AS avg_disc, count(*) AS count_order | +| | Aggregate: groupBy=[[lineitem.l_returnflag, lineitem.l_linestatus]], aggr=[[sum(lineitem.l_quantity), sum(lineitem.l_extendedprice), sum(lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount)), sum(lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount) * (Int64(1) + lineitem.l_tax)), avg(lineitem.l_quantity), avg(lineitem.l_extendedprice), avg(lineitem.l_discount), count(*)]] | +| | Filter: lineitem.l_shipdate <= CAST(Utf8("1998-09-02") AS Date32) | +| | TableScan: lineitem projection=[l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT lineitem.l_returnflag, lineitem.l_linestatus, sum(lineitem.l_quantity) AS sum_qty, sum(lineitem.l_extendedprice) AS sum_base_price, sum((lineitem.l_extendedprice * (1 - lineitem.l_discount))) AS sum_disc_price, sum(((lineitem.l_extendedprice * (1 - lineitem.l_discount)) * (1 + lineitem.l_tax))) AS sum_charge, avg(lineitem.l_quantity) AS avg_qty, avg(lineitem.l_extendedprice) AS avg_price, avg(lineitem.l_discount) AS avg_disc, count(*) AS count_order FROM lineitem WHERE (lineitem.l_shipdate <= CAST('1998-09-02' AS DATE)) GROUP BY lineitem.l_returnflag, lineitem.l_linestatus ORDER BY lineitem.l_returnflag ASC NULLS LAST, lineitem.l_linestatus ASC NULLS LAST rewritten_sql=SELECT "lineitem"."l_returnflag", "lineitem"."l_linestatus", sum("lineitem"."l_quantity") AS "sum_qty", sum("lineitem"."l_extendedprice") AS "sum_base_price", sum(("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount"))) AS "sum_disc_price", sum((("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount")) * (1 + "lineitem"."l_tax"))) AS "sum_charge", avg("lineitem"."l_quantity") AS "avg_qty", avg("lineitem"."l_extendedprice") AS "avg_price", avg("lineitem"."l_discount") AS "avg_disc", count(*) AS "count_order" FROM "lineitem" WHERE ("lineitem"."l_shipdate" <= CAST('1998-09-02' AS DATE)) GROUP BY "lineitem"."l_returnflag", "lineitem"."l_linestatus" ORDER BY "lineitem"."l_returnflag" ASC NULLS LAST, "lineitem"."l_linestatus" ASC NULLS LAST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q20_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q20_explain.snap new file mode 100644 index 0000000000..e48456f706 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q20_explain.snap @@ -0,0 +1,33 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q20" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: supplier.s_name ASC NULLS LAST | +| | Projection: supplier.s_name, supplier.s_address | +| | Inner Join: Filter: supplier.s_nationkey = nation.n_nationkey | +| | Filter: supplier.s_suppkey IN () | +| | Subquery: | +| | Projection: partsupp.ps_suppkey | +| | Filter: partsupp.ps_partkey IN () AND partsupp.ps_availqty > () | +| | Subquery: | +| | Projection: part.p_partkey | +| | Filter: part.p_name LIKE Utf8("forest%") | +| | TableScan: part | +| | Subquery: | +| | Projection: Float64(0.5) * sum(lineitem.l_quantity) | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_quantity)]] | +| | Filter: lineitem.l_partkey = outer_ref(partsupp.ps_partkey) AND lineitem.l_suppkey = outer_ref(partsupp.ps_suppkey) AND lineitem.l_shipdate >= CAST(Utf8("1994-01-01") AS Date32) AND lineitem.l_shipdate < CAST(Utf8("1994-01-01") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 12, days: 0, nanoseconds: 0 }") | +| | TableScan: lineitem | +| | TableScan: partsupp | +| | TableScan: supplier projection=[s_suppkey, s_name, s_address, s_nationkey] | +| | TableScan: nation projection=[n_nationkey], full_filters=[nation.n_name = Utf8("CANADA")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT supplier.s_name, supplier.s_address FROM supplier JOIN nation ON ((supplier.s_nationkey = nation.n_nationkey) AND (supplier.s_suppkey IN (SELECT partsupp.ps_suppkey FROM partsupp WHERE (partsupp.ps_partkey IN (SELECT "part".p_partkey FROM "part" WHERE "part".p_name LIKE 'forest%') AND (partsupp.ps_availqty > (SELECT (0.5 * sum(lineitem.l_quantity)) FROM lineitem WHERE ((((lineitem.l_partkey = partsupp.ps_partkey) AND (lineitem.l_suppkey = partsupp.ps_suppkey)) AND (lineitem.l_shipdate >= CAST('1994-01-01' AS DATE))) AND (lineitem.l_shipdate < (CAST('1994-01-01' AS DATE) + INTERVAL '12 MONS'))))))) AND (nation.n_name = 'CANADA'))) ORDER BY supplier.s_name ASC NULLS LAST rewritten_sql=SELECT "supplier"."s_name", "supplier"."s_address" FROM "supplier" JOIN "nation" ON (("supplier"."s_nationkey" = "nation"."n_nationkey") AND ("supplier"."s_suppkey" IN (SELECT "partsupp"."ps_suppkey" FROM "partsupp" WHERE ("partsupp"."ps_partkey" IN (SELECT "part"."p_partkey" FROM "part" WHERE "part"."p_name" LIKE 'forest%') AND ("partsupp"."ps_availqty" > (SELECT (0.5 * sum("lineitem"."l_quantity")) FROM "lineitem" WHERE (((("lineitem"."l_partkey" = "partsupp"."ps_partkey") AND ("lineitem"."l_suppkey" = "partsupp"."ps_suppkey")) AND ("lineitem"."l_shipdate" >= CAST('1994-01-01' AS DATE))) AND ("lineitem"."l_shipdate" < (CAST('1994-01-01' AS DATE) + INTERVAL '12 MONS'))))))) AND ("nation"."n_name" = 'CANADA'))) ORDER BY "supplier"."s_name" ASC NULLS LAST | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q21_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q21_explain.snap new file mode 100644 index 0000000000..19d2fd97eb --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q21_explain.snap @@ -0,0 +1,38 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q21" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: numwait DESC NULLS FIRST, supplier.s_name ASC NULLS LAST | +| | Projection: supplier.s_name, count(*) AS numwait | +| | Aggregate: groupBy=[[supplier.s_name]], aggr=[[count(*)]] | +| | Inner Join: Filter: supplier.s_nationkey = nation.n_nationkey | +| | Inner Join: Filter: orders.o_orderkey = l1.l_orderkey | +| | Inner Join: Filter: supplier.s_suppkey = l1.l_suppkey | +| | Filter: EXISTS () AND NOT EXISTS () | +| | Subquery: | +| | Projection: l2.l_orderkey, l2.l_partkey, l2.l_suppkey, l2.l_linenumber, l2.l_quantity, l2.l_extendedprice, l2.l_discount, l2.l_tax, l2.l_returnflag, l2.l_linestatus, l2.l_shipdate, l2.l_commitdate, l2.l_receiptdate, l2.l_shipinstruct, l2.l_shipmode, l2.l_comment | +| | Filter: l2.l_orderkey = outer_ref(l1.l_orderkey) AND l2.l_suppkey != outer_ref(l1.l_suppkey) | +| | SubqueryAlias: l2 | +| | TableScan: lineitem | +| | Subquery: | +| | Projection: l3.l_orderkey, l3.l_partkey, l3.l_suppkey, l3.l_linenumber, l3.l_quantity, l3.l_extendedprice, l3.l_discount, l3.l_tax, l3.l_returnflag, l3.l_linestatus, l3.l_shipdate, l3.l_commitdate, l3.l_receiptdate, l3.l_shipinstruct, l3.l_shipmode, l3.l_comment | +| | Filter: l3.l_orderkey = outer_ref(l1.l_orderkey) AND l3.l_suppkey != outer_ref(l1.l_suppkey) AND l3.l_receiptdate > l3.l_commitdate | +| | SubqueryAlias: l3 | +| | TableScan: lineitem | +| | TableScan: supplier projection=[s_suppkey, s_name, s_nationkey] | +| | Filter: l1.l_receiptdate > l1.l_commitdate | +| | SubqueryAlias: l1 | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_commitdate, l_receiptdate] | +| | TableScan: orders projection=[o_orderkey], full_filters=[orders.o_orderstatus = Utf8("F")] | +| | TableScan: nation projection=[n_nationkey], full_filters=[nation.n_name = Utf8("SAUDI ARABIA")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT supplier.s_name, count(*) AS numwait FROM supplier JOIN lineitem AS l1 ON ((supplier.s_suppkey = l1.l_suppkey) AND ((EXISTS (SELECT l2.l_orderkey, l2.l_partkey, l2.l_suppkey, l2.l_linenumber, l2.l_quantity, l2.l_extendedprice, l2.l_discount, l2.l_tax, l2.l_returnflag, l2.l_linestatus, l2.l_shipdate, l2.l_commitdate, l2.l_receiptdate, l2.l_shipinstruct, l2.l_shipmode, l2.l_comment FROM lineitem AS l2 WHERE ((l2.l_orderkey = l1.l_orderkey) AND (l2.l_suppkey <> l1.l_suppkey))) AND NOT EXISTS (SELECT l3.l_orderkey, l3.l_partkey, l3.l_suppkey, l3.l_linenumber, l3.l_quantity, l3.l_extendedprice, l3.l_discount, l3.l_tax, l3.l_returnflag, l3.l_linestatus, l3.l_shipdate, l3.l_commitdate, l3.l_receiptdate, l3.l_shipinstruct, l3.l_shipmode, l3.l_comment FROM lineitem AS l3 WHERE (((l3.l_orderkey = l1.l_orderkey) AND (l3.l_suppkey <> l1.l_suppkey)) AND (l3.l_receiptdate > l3.l_commitdate)))) AND (l1.l_receiptdate > l1.l_commitdate))) JOIN orders ON ((orders.o_orderkey = l1.l_orderkey) AND (orders.o_orderstatus = 'F')) JOIN nation ON ((supplier.s_nationkey = nation.n_nationkey) AND (nation.n_name = 'SAUDI ARABIA')) GROUP BY supplier.s_name ORDER BY numwait DESC NULLS FIRST, supplier.s_name ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT "supplier"."s_name", count(*) AS "numwait" FROM "supplier" JOIN "lineitem" AS "l1" ON (("supplier"."s_suppkey" = "l1"."l_suppkey") AND ((EXISTS (SELECT "l2"."l_orderkey", "l2"."l_partkey", "l2"."l_suppkey", "l2"."l_linenumber", "l2"."l_quantity", "l2"."l_extendedprice", "l2"."l_discount", "l2"."l_tax", "l2"."l_returnflag", "l2"."l_linestatus", "l2"."l_shipdate", "l2"."l_commitdate", "l2"."l_receiptdate", "l2"."l_shipinstruct", "l2"."l_shipmode", "l2"."l_comment" FROM "lineitem" AS "l2" WHERE (("l2"."l_orderkey" = "l1"."l_orderkey") AND ("l2"."l_suppkey" <> "l1"."l_suppkey"))) AND NOT EXISTS (SELECT "l3"."l_orderkey", "l3"."l_partkey", "l3"."l_suppkey", "l3"."l_linenumber", "l3"."l_quantity", "l3"."l_extendedprice", "l3"."l_discount", "l3"."l_tax", "l3"."l_returnflag", "l3"."l_linestatus", "l3"."l_shipdate", "l3"."l_commitdate", "l3"."l_receiptdate", "l3"."l_shipinstruct", "l3"."l_shipmode", "l3"."l_comment" FROM "lineitem" AS "l3" WHERE ((("l3"."l_orderkey" = "l1"."l_orderkey") AND ("l3"."l_suppkey" <> "l1"."l_suppkey")) AND ("l3"."l_receiptdate" > "l3"."l_commitdate")))) AND ("l1"."l_receiptdate" > "l1"."l_commitdate"))) JOIN "orders" ON (("orders"."o_orderkey" = "l1"."l_orderkey") AND ("orders"."o_orderstatus" = 'F')) JOIN "nation" ON (("supplier"."s_nationkey" = "nation"."n_nationkey") AND ("nation"."n_name" = 'SAUDI ARABIA')) GROUP BY "supplier"."s_name" ORDER BY "numwait" DESC NULLS FIRST, "supplier"."s_name" ASC NULLS LAST LIMIT 100 | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q22_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q22_explain.snap new file mode 100644 index 0000000000..5f1ce3473f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q22_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q22" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: custsale.cntrycode ASC NULLS LAST | +| | Projection: custsale.cntrycode, count(*) AS numcust, sum(custsale.c_acctbal) AS totacctbal | +| | Aggregate: groupBy=[[custsale.cntrycode]], aggr=[[count(*), sum(custsale.c_acctbal)]] | +| | SubqueryAlias: custsale | +| | Projection: substr(customer.c_phone, Int64(1), Int64(2)) AS cntrycode, customer.c_acctbal | +| | Filter: customer.c_acctbal > () AND NOT EXISTS () | +| | Subquery: | +| | Projection: avg(customer.c_acctbal) | +| | Aggregate: groupBy=[[]], aggr=[[avg(customer.c_acctbal)]] | +| | Filter: customer.c_acctbal > Float64(0) AND substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")]) | +| | TableScan: customer | +| | Subquery: | +| | Projection: orders.o_orderkey, orders.o_custkey, orders.o_orderstatus, orders.o_totalprice, orders.o_orderdate, orders.o_orderpriority, orders.o_clerk, orders.o_shippriority, orders.o_comment | +| | Filter: orders.o_custkey = outer_ref(customer.c_custkey) | +| | TableScan: orders | +| | TableScan: customer projection=[c_custkey, c_phone, c_acctbal], full_filters=[substr(customer.c_phone, Int64(1), Int64(2)) IN ([Utf8("13"), Utf8("31"), Utf8("23"), Utf8("29"), Utf8("30"), Utf8("18"), Utf8("17")])] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT custsale.cntrycode, count(*) AS numcust, sum(custsale.c_acctbal) AS totacctbal FROM (SELECT substr(customer.c_phone, 1, 2) AS cntrycode, customer.c_acctbal FROM customer WHERE ((customer.c_acctbal > (SELECT avg(customer.c_acctbal) FROM customer WHERE ((customer.c_acctbal > 0.0) AND substr(customer.c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')))) AND NOT EXISTS (SELECT orders.o_orderkey, orders.o_custkey, orders.o_orderstatus, orders.o_totalprice, orders.o_orderdate, orders.o_orderpriority, orders.o_clerk, orders.o_shippriority, orders.o_comment FROM orders WHERE (orders.o_custkey = customer.c_custkey))) AND substr(customer.c_phone, 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')) AS custsale GROUP BY custsale.cntrycode ORDER BY custsale.cntrycode ASC NULLS LAST rewritten_sql=SELECT "custsale"."cntrycode", count(*) AS "numcust", sum("custsale"."c_acctbal") AS "totacctbal" FROM (SELECT substr("customer"."c_phone", 1, 2) AS "cntrycode", "customer"."c_acctbal" FROM "customer" WHERE (("customer"."c_acctbal" > (SELECT avg("customer"."c_acctbal") FROM "customer" WHERE (("customer"."c_acctbal" > 0.0) AND substr("customer"."c_phone", 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')))) AND NOT EXISTS (SELECT "orders"."o_orderkey", "orders"."o_custkey", "orders"."o_orderstatus", "orders"."o_totalprice", "orders"."o_orderdate", "orders"."o_orderpriority", "orders"."o_clerk", "orders"."o_shippriority", "orders"."o_comment" FROM "orders" WHERE ("orders"."o_custkey" = "customer"."c_custkey"))) AND substr("customer"."c_phone", 1, 2) IN ('13', '31', '23', '29', '30', '18', '17')) AS "custsale" GROUP BY "custsale"."cntrycode" ORDER BY "custsale"."cntrycode" ASC NULLS LAST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q2_explain.snap new file mode 100644 index 0000000000..d2b9fcb77a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q2_explain.snap @@ -0,0 +1,38 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q2" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=100 | +| | Sort: supplier.s_acctbal DESC NULLS FIRST, nation.n_name ASC NULLS LAST, supplier.s_name ASC NULLS LAST, part.p_partkey ASC NULLS LAST | +| | Projection: supplier.s_acctbal, supplier.s_name, nation.n_name, part.p_partkey, part.p_mfgr, supplier.s_address, supplier.s_phone, supplier.s_comment | +| | Inner Join: Filter: nation.n_regionkey = region.r_regionkey | +| | Inner Join: Filter: supplier.s_nationkey = nation.n_nationkey | +| | Inner Join: Filter: part.p_partkey = partsupp.ps_partkey AND supplier.s_suppkey = partsupp.ps_suppkey | +| | Cross Join: | +| | TableScan: part projection=[p_partkey, p_mfgr], full_filters=[part.p_size = Int64(15), part.p_type LIKE Utf8("%BRASS")] | +| | TableScan: supplier projection=[s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment] | +| | Filter: partsupp.ps_supplycost = () | +| | Subquery: | +| | Projection: min(partsupp.ps_supplycost) | +| | Aggregate: groupBy=[[]], aggr=[[min(partsupp.ps_supplycost)]] | +| | Filter: outer_ref(part.p_partkey) = partsupp.ps_partkey AND supplier.s_suppkey = partsupp.ps_suppkey AND supplier.s_nationkey = nation.n_nationkey AND nation.n_regionkey = region.r_regionkey AND region.r_name = Utf8("EUROPE") | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | TableScan: partsupp | +| | TableScan: supplier | +| | TableScan: nation | +| | TableScan: region | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | TableScan: nation projection=[n_nationkey, n_name, n_regionkey] | +| | TableScan: region projection=[r_regionkey], full_filters=[region.r_name = Utf8("EUROPE")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT supplier.s_acctbal, supplier.s_name, nation.n_name, "part".p_partkey, "part".p_mfgr, supplier.s_address, supplier.s_phone, supplier.s_comment FROM "part" JOIN supplier ON (("part".p_size = 15) AND "part".p_type LIKE '%BRASS') JOIN partsupp ON ((("part".p_partkey = partsupp.ps_partkey) AND (supplier.s_suppkey = partsupp.ps_suppkey)) AND (partsupp.ps_supplycost = (SELECT min(partsupp.ps_supplycost) FROM partsupp CROSS JOIN supplier CROSS JOIN nation CROSS JOIN region WHERE ((((("part".p_partkey = partsupp.ps_partkey) AND (supplier.s_suppkey = partsupp.ps_suppkey)) AND (supplier.s_nationkey = nation.n_nationkey)) AND (nation.n_regionkey = region.r_regionkey)) AND (region.r_name = 'EUROPE'))))) JOIN nation ON (supplier.s_nationkey = nation.n_nationkey) JOIN region ON ((nation.n_regionkey = region.r_regionkey) AND (region.r_name = 'EUROPE')) ORDER BY supplier.s_acctbal DESC NULLS FIRST, nation.n_name ASC NULLS LAST, supplier.s_name ASC NULLS LAST, "part".p_partkey ASC NULLS LAST LIMIT 100 rewritten_sql=SELECT "supplier"."s_acctbal", "supplier"."s_name", "nation"."n_name", "part"."p_partkey", "part"."p_mfgr", "supplier"."s_address", "supplier"."s_phone", "supplier"."s_comment" FROM "part" JOIN "supplier" ON (("part"."p_size" = 15) AND "part"."p_type" LIKE '%BRASS') JOIN "partsupp" ON ((("part"."p_partkey" = "partsupp"."ps_partkey") AND ("supplier"."s_suppkey" = "partsupp"."ps_suppkey")) AND ("partsupp"."ps_supplycost" = (SELECT min("partsupp"."ps_supplycost") FROM "partsupp" CROSS JOIN "supplier" CROSS JOIN "nation" CROSS JOIN "region" WHERE ((((("part"."p_partkey" = "partsupp"."ps_partkey") AND ("supplier"."s_suppkey" = "partsupp"."ps_suppkey")) AND ("supplier"."s_nationkey" = "nation"."n_nationkey")) AND ("nation"."n_regionkey" = "region"."r_regionkey")) AND ("region"."r_name" = 'EUROPE'))))) JOIN "nation" ON ("supplier"."s_nationkey" = "nation"."n_nationkey") JOIN "region" ON (("nation"."n_regionkey" = "region"."r_regionkey") AND ("region"."r_name" = 'EUROPE')) ORDER BY "supplier"."s_acctbal" DESC NULLS FIRST, "nation"."n_name" ASC NULLS LAST, "supplier"."s_name" ASC NULLS LAST, "part"."p_partkey" ASC NULLS LAST LIMIT 100 | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q3_explain.snap new file mode 100644 index 0000000000..6a42d856c1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q3_explain.snap @@ -0,0 +1,25 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q3" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: revenue DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST | +| | Projection: lineitem.l_orderkey, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue, orders.o_orderdate, orders.o_shippriority | +| | Aggregate: groupBy=[[lineitem.l_orderkey, orders.o_orderdate, orders.o_shippriority]], aggr=[[sum(lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount))]] | +| | Inner Join: Filter: lineitem.l_orderkey = orders.o_orderkey | +| | Inner Join: Filter: customer.c_custkey = orders.o_custkey | +| | TableScan: customer projection=[c_custkey], full_filters=[customer.c_mktsegment = Utf8("BUILDING")] | +| | Filter: orders.o_orderdate < CAST(Utf8("1995-03-15") AS Date32) | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate, o_shippriority] | +| | Filter: lineitem.l_shipdate > CAST(Utf8("1995-03-15") AS Date32) | +| | TableScan: lineitem projection=[l_orderkey, l_extendedprice, l_discount, l_shipdate] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT lineitem.l_orderkey, sum((lineitem.l_extendedprice * (1 - lineitem.l_discount))) AS revenue, orders.o_orderdate, orders.o_shippriority FROM customer JOIN orders ON ((customer.c_custkey = orders.o_custkey) AND ((customer.c_mktsegment = 'BUILDING') AND (orders.o_orderdate < CAST('1995-03-15' AS DATE)))) JOIN lineitem ON ((lineitem.l_orderkey = orders.o_orderkey) AND (lineitem.l_shipdate > CAST('1995-03-15' AS DATE))) GROUP BY lineitem.l_orderkey, orders.o_orderdate, orders.o_shippriority ORDER BY revenue DESC NULLS FIRST, orders.o_orderdate ASC NULLS LAST LIMIT 10 rewritten_sql=SELECT "lineitem"."l_orderkey", sum(("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount"))) AS "revenue", "orders"."o_orderdate", "orders"."o_shippriority" FROM "customer" JOIN "orders" ON (("customer"."c_custkey" = "orders"."o_custkey") AND (("customer"."c_mktsegment" = 'BUILDING') AND ("orders"."o_orderdate" < CAST('1995-03-15' AS DATE)))) JOIN "lineitem" ON (("lineitem"."l_orderkey" = "orders"."o_orderkey") AND ("lineitem"."l_shipdate" > CAST('1995-03-15' AS DATE))) GROUP BY "lineitem"."l_orderkey", "orders"."o_orderdate", "orders"."o_shippriority" ORDER BY "revenue" DESC NULLS FIRST, "orders"."o_orderdate" ASC NULLS LAST LIMIT 10 | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q4_explain.snap new file mode 100644 index 0000000000..2611b2fd7e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q4_explain.snap @@ -0,0 +1,23 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q4" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: orders.o_orderpriority ASC NULLS LAST | +| | Projection: orders.o_orderpriority, count(*) AS order_count | +| | Aggregate: groupBy=[[orders.o_orderpriority]], aggr=[[count(*)]] | +| | Filter: orders.o_orderdate < CAST(Utf8("1993-07-01") AS Date32) + IntervalMonthDayNano("IntervalMonthDayNano { months: 3, days: 0, nanoseconds: 0 }") AND EXISTS () | +| | Subquery: | +| | Projection: lineitem.l_orderkey, lineitem.l_partkey, lineitem.l_suppkey, lineitem.l_linenumber, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_tax, lineitem.l_returnflag, lineitem.l_linestatus, lineitem.l_shipdate, lineitem.l_commitdate, lineitem.l_receiptdate, lineitem.l_shipinstruct, lineitem.l_shipmode, lineitem.l_comment | +| | Filter: lineitem.l_orderkey = outer_ref(orders.o_orderkey) AND lineitem.l_commitdate < lineitem.l_receiptdate | +| | TableScan: lineitem | +| | TableScan: orders projection=[o_orderkey, o_orderdate, o_orderpriority], full_filters=[orders.o_orderdate >= Utf8("1993-07-01")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT orders.o_orderpriority, count(*) AS order_count FROM orders WHERE ((orders.o_orderdate < (CAST('1993-07-01' AS DATE) + INTERVAL '3 MONS')) AND EXISTS (SELECT lineitem.l_orderkey, lineitem.l_partkey, lineitem.l_suppkey, lineitem.l_linenumber, lineitem.l_quantity, lineitem.l_extendedprice, lineitem.l_discount, lineitem.l_tax, lineitem.l_returnflag, lineitem.l_linestatus, lineitem.l_shipdate, lineitem.l_commitdate, lineitem.l_receiptdate, lineitem.l_shipinstruct, lineitem.l_shipmode, lineitem.l_comment FROM lineitem WHERE ((lineitem.l_orderkey = orders.o_orderkey) AND (lineitem.l_commitdate < lineitem.l_receiptdate)))) AND (orders.o_orderdate >= '1993-07-01') GROUP BY orders.o_orderpriority ORDER BY orders.o_orderpriority ASC NULLS LAST rewritten_sql=SELECT "orders"."o_orderpriority", count(*) AS "order_count" FROM "orders" WHERE (("orders"."o_orderdate" < (CAST('1993-07-01' AS DATE) + INTERVAL '3 MONS')) AND EXISTS (SELECT "lineitem"."l_orderkey", "lineitem"."l_partkey", "lineitem"."l_suppkey", "lineitem"."l_linenumber", "lineitem"."l_quantity", "lineitem"."l_extendedprice", "lineitem"."l_discount", "lineitem"."l_tax", "lineitem"."l_returnflag", "lineitem"."l_linestatus", "lineitem"."l_shipdate", "lineitem"."l_commitdate", "lineitem"."l_receiptdate", "lineitem"."l_shipinstruct", "lineitem"."l_shipmode", "lineitem"."l_comment" FROM "lineitem" WHERE (("lineitem"."l_orderkey" = "orders"."o_orderkey") AND ("lineitem"."l_commitdate" < "lineitem"."l_receiptdate")))) AND ("orders"."o_orderdate" >= '1993-07-01') GROUP BY "orders"."o_orderpriority" ORDER BY "orders"."o_orderpriority" ASC NULLS LAST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q5_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q5_explain.snap new file mode 100644 index 0000000000..b61c4c6a06 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q5_explain.snap @@ -0,0 +1,29 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q5" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: revenue DESC NULLS FIRST | +| | Projection: nation.n_name, sum(lineitem.l_extendedprice * Int64(1) - lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[nation.n_name]], aggr=[[sum(lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount))]] | +| | Inner Join: Filter: nation.n_regionkey = region.r_regionkey | +| | Inner Join: Filter: supplier.s_nationkey = nation.n_nationkey | +| | Inner Join: Filter: lineitem.l_suppkey = supplier.s_suppkey AND customer.c_nationkey = supplier.s_nationkey | +| | Inner Join: Filter: lineitem.l_orderkey = orders.o_orderkey | +| | Inner Join: Filter: customer.c_custkey = orders.o_custkey | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | Filter: orders.o_orderdate >= CAST(Utf8("1994-01-01") AS Date32) AND orders.o_orderdate < CAST(Utf8("1995-01-01") AS Date32) | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate] | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount] | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | TableScan: nation projection=[n_nationkey, n_name, n_regionkey] | +| | TableScan: region projection=[r_regionkey], full_filters=[region.r_name = Utf8("ASIA")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT nation.n_name, sum((lineitem.l_extendedprice * (1 - lineitem.l_discount))) AS revenue FROM customer JOIN orders ON ((customer.c_custkey = orders.o_custkey) AND ((orders.o_orderdate >= CAST('1994-01-01' AS DATE)) AND (orders.o_orderdate < CAST('1995-01-01' AS DATE)))) JOIN lineitem ON (lineitem.l_orderkey = orders.o_orderkey) JOIN supplier ON ((lineitem.l_suppkey = supplier.s_suppkey) AND (customer.c_nationkey = supplier.s_nationkey)) JOIN nation ON (supplier.s_nationkey = nation.n_nationkey) JOIN region ON ((nation.n_regionkey = region.r_regionkey) AND (region.r_name = 'ASIA')) GROUP BY nation.n_name ORDER BY revenue DESC NULLS FIRST rewritten_sql=SELECT "nation"."n_name", sum(("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount"))) AS "revenue" FROM "customer" JOIN "orders" ON (("customer"."c_custkey" = "orders"."o_custkey") AND (("orders"."o_orderdate" >= CAST('1994-01-01' AS DATE)) AND ("orders"."o_orderdate" < CAST('1995-01-01' AS DATE)))) JOIN "lineitem" ON ("lineitem"."l_orderkey" = "orders"."o_orderkey") JOIN "supplier" ON (("lineitem"."l_suppkey" = "supplier"."s_suppkey") AND ("customer"."c_nationkey" = "supplier"."s_nationkey")) JOIN "nation" ON ("supplier"."s_nationkey" = "nation"."n_nationkey") JOIN "region" ON (("nation"."n_regionkey" = "region"."r_regionkey") AND ("region"."r_name" = 'ASIA')) GROUP BY "nation"."n_name" ORDER BY "revenue" DESC NULLS FIRST | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q6_explain.snap new file mode 100644 index 0000000000..d7a5cc59f4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q6_explain.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q6" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: sum(lineitem.l_extendedprice * lineitem.l_discount) AS revenue | +| | Aggregate: groupBy=[[]], aggr=[[sum(lineitem.l_extendedprice * lineitem.l_discount)]] | +| | Filter: lineitem.l_shipdate >= CAST(Utf8("1994-01-01") AS Date32) AND lineitem.l_shipdate < CAST(Utf8("1995-01-01") AS Date32) AND lineitem.l_discount BETWEEN Float64(0.06) - Float64(0.01) AND Float64(0.06) + Float64(0.01) | +| | TableScan: lineitem projection=[l_extendedprice, l_discount, l_shipdate], full_filters=[lineitem.l_quantity < Int64(24)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT sum((lineitem.l_extendedprice * lineitem.l_discount)) AS revenue FROM lineitem WHERE (((lineitem.l_shipdate >= CAST('1994-01-01' AS DATE)) AND (lineitem.l_shipdate < CAST('1995-01-01' AS DATE))) AND (lineitem.l_discount BETWEEN (0.06 - 0.01) AND (0.06 + 0.01))) AND (lineitem.l_quantity < 24) rewritten_sql=SELECT sum(("lineitem"."l_extendedprice" * "lineitem"."l_discount")) AS "revenue" FROM "lineitem" WHERE ((("lineitem"."l_shipdate" >= CAST('1994-01-01' AS DATE)) AND ("lineitem"."l_shipdate" < CAST('1995-01-01' AS DATE))) AND ("lineitem"."l_discount" BETWEEN (0.06 - 0.01) AND (0.06 + 0.01))) AND ("lineitem"."l_quantity" < 24) | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q7_explain.snap new file mode 100644 index 0000000000..e0879e387f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q7_explain.snap @@ -0,0 +1,35 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q7" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: shipping.supp_nation ASC NULLS LAST, shipping.cust_nation ASC NULLS LAST, shipping.l_year ASC NULLS LAST | +| | Projection: shipping.supp_nation, shipping.cust_nation, shipping.l_year, sum(shipping.volume) AS revenue | +| | Aggregate: groupBy=[[shipping.supp_nation, shipping.cust_nation, shipping.l_year]], aggr=[[sum(shipping.volume)]] | +| | SubqueryAlias: shipping | +| | Projection: n1.n_name AS supp_nation, n2.n_name AS cust_nation, date_part(Utf8("YEAR"), lineitem.l_shipdate) AS l_year, lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount) AS volume | +| | Inner Join: Filter: customer.c_nationkey = n2.n_nationkey AND (n1.n_name = Utf8("FRANCE") AND n2.n_name = Utf8("GERMANY") OR n1.n_name = Utf8("GERMANY") AND n2.n_name = Utf8("FRANCE")) | +| | Inner Join: Filter: supplier.s_nationkey = n1.n_nationkey | +| | Inner Join: Filter: customer.c_custkey = orders.o_custkey | +| | Inner Join: Filter: orders.o_orderkey = lineitem.l_orderkey | +| | Inner Join: Filter: supplier.s_suppkey = lineitem.l_suppkey | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | Filter: lineitem.l_shipdate BETWEEN CAST(Utf8("1995-01-01") AS Date32) AND CAST(Utf8("1996-12-31") AS Date32) | +| | TableScan: lineitem projection=[l_orderkey, l_suppkey, l_extendedprice, l_discount, l_shipdate] | +| | TableScan: orders projection=[o_orderkey, o_custkey] | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | Filter: n1.n_name = Utf8("FRANCE") OR n1.n_name = Utf8("GERMANY") | +| | SubqueryAlias: n1 | +| | TableScan: nation projection=[n_nationkey, n_name] | +| | Filter: n2.n_name = Utf8("GERMANY") OR n2.n_name = Utf8("FRANCE") | +| | SubqueryAlias: n2 | +| | TableScan: nation projection=[n_nationkey, n_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT shipping.supp_nation, shipping.cust_nation, shipping.l_year, sum(shipping.volume) AS revenue FROM (SELECT n1.n_name AS supp_nation, n2.n_name AS cust_nation, date_part('YEAR', lineitem.l_shipdate) AS l_year, (lineitem.l_extendedprice * (1 - lineitem.l_discount)) AS volume FROM supplier JOIN lineitem ON ((supplier.s_suppkey = lineitem.l_suppkey) AND (lineitem.l_shipdate BETWEEN CAST('1995-01-01' AS DATE) AND CAST('1996-12-31' AS DATE))) JOIN orders ON (orders.o_orderkey = lineitem.l_orderkey) JOIN customer ON (customer.c_custkey = orders.o_custkey) JOIN nation AS n1 ON ((supplier.s_nationkey = n1.n_nationkey) AND ((n1.n_name = 'FRANCE') OR (n1.n_name = 'GERMANY'))) JOIN nation AS n2 ON (((customer.c_nationkey = n2.n_nationkey) AND (((n1.n_name = 'FRANCE') AND (n2.n_name = 'GERMANY')) OR ((n1.n_name = 'GERMANY') AND (n2.n_name = 'FRANCE')))) AND ((n2.n_name = 'GERMANY') OR (n2.n_name = 'FRANCE')))) AS shipping GROUP BY shipping.supp_nation, shipping.cust_nation, shipping.l_year ORDER BY shipping.supp_nation ASC NULLS LAST, shipping.cust_nation ASC NULLS LAST, shipping.l_year ASC NULLS LAST rewritten_sql=SELECT "shipping"."supp_nation", "shipping"."cust_nation", "shipping"."l_year", sum("shipping"."volume") AS "revenue" FROM (SELECT "n1"."n_name" AS "supp_nation", "n2"."n_name" AS "cust_nation", date_part('YEAR', "lineitem"."l_shipdate") AS "l_year", ("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount")) AS "volume" FROM "supplier" JOIN "lineitem" ON (("supplier"."s_suppkey" = "lineitem"."l_suppkey") AND ("lineitem"."l_shipdate" BETWEEN CAST('1995-01-01' AS DATE) AND CAST('1996-12-31' AS DATE))) JOIN "orders" ON ("orders"."o_orderkey" = "lineitem"."l_orderkey") JOIN "customer" ON ("customer"."c_custkey" = "orders"."o_custkey") JOIN "nation" AS "n1" ON (("supplier"."s_nationkey" = "n1"."n_nationkey") AND (("n1"."n_name" = 'FRANCE') OR ("n1"."n_name" = 'GERMANY'))) JOIN "nation" AS "n2" ON ((("customer"."c_nationkey" = "n2"."n_nationkey") AND ((("n1"."n_name" = 'FRANCE') AND ("n2"."n_name" = 'GERMANY')) OR (("n1"."n_name" = 'GERMANY') AND ("n2"."n_name" = 'FRANCE')))) AND (("n2"."n_name" = 'GERMANY') OR ("n2"."n_name" = 'FRANCE')))) AS "shipping" GROUP BY "shipping"."supp_nation", "shipping"."cust_nation", "shipping"."l_year" ORDER BY "shipping"."supp_nation" ASC NULLS LAST, "shipping"."cust_nation" ASC NULLS LAST, "shipping"."l_year" ASC NULLS LAST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q8_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q8_explain.snap new file mode 100644 index 0000000000..4d7db306a8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q8_explain.snap @@ -0,0 +1,37 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q8" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: all_nations.o_year ASC NULLS LAST | +| | Projection: all_nations.o_year, sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END) / sum(all_nations.volume) AS mkt_share | +| | Aggregate: groupBy=[[all_nations.o_year]], aggr=[[sum(CASE WHEN all_nations.nation = Utf8("BRAZIL") THEN all_nations.volume ELSE Int64(0) END), sum(all_nations.volume)]] | +| | SubqueryAlias: all_nations | +| | Projection: date_part(Utf8("YEAR"), orders.o_orderdate) AS o_year, lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount) AS volume, n2.n_name AS nation | +| | Inner Join: Filter: n1.n_regionkey = region.r_regionkey | +| | Inner Join: Filter: supplier.s_nationkey = n2.n_nationkey | +| | Inner Join: Filter: customer.c_nationkey = n1.n_nationkey | +| | Inner Join: Filter: orders.o_custkey = customer.c_custkey | +| | Inner Join: Filter: lineitem.l_orderkey = orders.o_orderkey | +| | Inner Join: Filter: part.p_partkey = lineitem.l_partkey AND supplier.s_suppkey = lineitem.l_suppkey | +| | Cross Join: | +| | TableScan: part projection=[p_partkey], full_filters=[part.p_type = Utf8("ECONOMY ANODIZED STEEL")] | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | TableScan: lineitem projection=[l_orderkey, l_partkey, l_suppkey, l_extendedprice, l_discount] | +| | Filter: orders.o_orderdate BETWEEN CAST(Utf8("1995-01-01") AS Date32) AND CAST(Utf8("1996-12-31") AS Date32) | +| | TableScan: orders projection=[o_orderkey, o_custkey, o_orderdate] | +| | TableScan: customer projection=[c_custkey, c_nationkey] | +| | SubqueryAlias: n1 | +| | TableScan: nation projection=[n_nationkey, n_regionkey] | +| | SubqueryAlias: n2 | +| | TableScan: nation projection=[n_nationkey, n_name] | +| | TableScan: region projection=[r_regionkey], full_filters=[region.r_name = Utf8("AMERICA")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT all_nations.o_year, (sum(CASE WHEN (all_nations.nation = 'BRAZIL') THEN all_nations.volume ELSE 0 END) / sum(all_nations.volume)) AS mkt_share FROM (SELECT date_part('YEAR', orders.o_orderdate) AS o_year, (lineitem.l_extendedprice * (1 - lineitem.l_discount)) AS volume, n2.n_name AS nation FROM "part" JOIN supplier ON ("part".p_type = 'ECONOMY ANODIZED STEEL') JOIN lineitem ON (("part".p_partkey = lineitem.l_partkey) AND (supplier.s_suppkey = lineitem.l_suppkey)) JOIN orders ON ((lineitem.l_orderkey = orders.o_orderkey) AND (orders.o_orderdate BETWEEN CAST('1995-01-01' AS DATE) AND CAST('1996-12-31' AS DATE))) JOIN customer ON (orders.o_custkey = customer.c_custkey) JOIN nation AS n1 ON (customer.c_nationkey = n1.n_nationkey) JOIN nation AS n2 ON (supplier.s_nationkey = n2.n_nationkey) JOIN region ON ((n1.n_regionkey = region.r_regionkey) AND (region.r_name = 'AMERICA'))) AS all_nations GROUP BY all_nations.o_year ORDER BY all_nations.o_year ASC NULLS LAST rewritten_sql=SELECT "all_nations"."o_year", (sum(CASE WHEN ("all_nations"."nation" = 'BRAZIL') THEN "all_nations"."volume" ELSE 0 END) // sum("all_nations"."volume")) AS "mkt_share" FROM (SELECT date_part('YEAR', "orders"."o_orderdate") AS "o_year", ("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount")) AS "volume", "n2"."n_name" AS "nation" FROM "part" JOIN "supplier" ON ("part"."p_type" = 'ECONOMY ANODIZED STEEL') JOIN "lineitem" ON (("part"."p_partkey" = "lineitem"."l_partkey") AND ("supplier"."s_suppkey" = "lineitem"."l_suppkey")) JOIN "orders" ON (("lineitem"."l_orderkey" = "orders"."o_orderkey") AND ("orders"."o_orderdate" BETWEEN CAST('1995-01-01' AS DATE) AND CAST('1996-12-31' AS DATE))) JOIN "customer" ON ("orders"."o_custkey" = "customer"."c_custkey") JOIN "nation" AS "n1" ON ("customer"."c_nationkey" = "n1"."n_nationkey") JOIN "nation" AS "n2" ON ("supplier"."s_nationkey" = "n2"."n_nationkey") JOIN "region" ON (("n1"."n_regionkey" = "region"."r_regionkey") AND ("region"."r_name" = 'AMERICA'))) AS "all_nations" GROUP BY "all_nations"."o_year" ORDER BY "all_nations"."o_year" ASC NULLS LAST | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q9_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q9_explain.snap new file mode 100644 index 0000000000..621a1fd352 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__mysql-duckdb[file]_tpch_q9_explain.snap @@ -0,0 +1,30 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpch_q9" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: profit.nation ASC NULLS LAST, profit.o_year DESC NULLS FIRST | +| | Projection: profit.nation, profit.o_year, sum(profit.amount) AS sum_profit | +| | Aggregate: groupBy=[[profit.nation, profit.o_year]], aggr=[[sum(profit.amount)]] | +| | SubqueryAlias: profit | +| | Projection: nation.n_name AS nation, date_part(Utf8("YEAR"), orders.o_orderdate) AS o_year, lineitem.l_extendedprice * (Int64(1) - lineitem.l_discount) - partsupp.ps_supplycost * lineitem.l_quantity AS amount | +| | Inner Join: Filter: supplier.s_nationkey = nation.n_nationkey | +| | Inner Join: Filter: orders.o_orderkey = lineitem.l_orderkey | +| | Inner Join: Filter: partsupp.ps_suppkey = lineitem.l_suppkey AND partsupp.ps_partkey = lineitem.l_partkey | +| | Inner Join: Filter: supplier.s_suppkey = lineitem.l_suppkey AND part.p_partkey = lineitem.l_partkey | +| | Cross Join: | +| | TableScan: part projection=[p_partkey], full_filters=[part.p_name LIKE Utf8("%green%")] | +| | TableScan: supplier projection=[s_suppkey, s_nationkey] | +| | TableScan: lineitem projection=[l_orderkey, l_partkey, l_suppkey, l_quantity, l_extendedprice, l_discount] | +| | TableScan: partsupp projection=[ps_partkey, ps_suppkey, ps_supplycost] | +| | TableScan: orders projection=[o_orderkey, o_orderdate] | +| | TableScan: nation projection=[n_nationkey, n_name] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=duckdb compute_context=//data/accelerated_duckdb.db sql=SELECT profit.nation, profit.o_year, sum(profit.amount) AS sum_profit FROM (SELECT nation.n_name AS nation, date_part('YEAR', orders.o_orderdate) AS o_year, ((lineitem.l_extendedprice * (1 - lineitem.l_discount)) - (partsupp.ps_supplycost * lineitem.l_quantity)) AS amount FROM "part" JOIN supplier ON "part".p_name LIKE '%green%' JOIN lineitem ON ((supplier.s_suppkey = lineitem.l_suppkey) AND ("part".p_partkey = lineitem.l_partkey)) JOIN partsupp ON ((partsupp.ps_suppkey = lineitem.l_suppkey) AND (partsupp.ps_partkey = lineitem.l_partkey)) JOIN orders ON (orders.o_orderkey = lineitem.l_orderkey) JOIN nation ON (supplier.s_nationkey = nation.n_nationkey)) AS profit GROUP BY profit.nation, profit.o_year ORDER BY profit.nation ASC NULLS LAST, profit.o_year DESC NULLS FIRST rewritten_sql=SELECT "profit"."nation", "profit"."o_year", sum("profit"."amount") AS "sum_profit" FROM (SELECT "nation"."n_name" AS "nation", date_part('YEAR', "orders"."o_orderdate") AS "o_year", (("lineitem"."l_extendedprice" * (1 - "lineitem"."l_discount")) - ("partsupp"."ps_supplycost" * "lineitem"."l_quantity")) AS "amount" FROM "part" JOIN "supplier" ON "part"."p_name" LIKE '%green%' JOIN "lineitem" ON (("supplier"."s_suppkey" = "lineitem"."l_suppkey") AND ("part"."p_partkey" = "lineitem"."l_partkey")) JOIN "partsupp" ON (("partsupp"."ps_suppkey" = "lineitem"."l_suppkey") AND ("partsupp"."ps_partkey" = "lineitem"."l_partkey")) JOIN "orders" ON ("orders"."o_orderkey" = "lineitem"."l_orderkey") JOIN "nation" ON ("supplier"."s_nationkey" = "nation"."n_nationkey")) AS "profit" GROUP BY "profit"."nation", "profit"."o_year" ORDER BY "profit"."nation" ASC NULLS LAST, "profit"."o_year" DESC NULLS FIRST | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q10_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q10_explain.snap new file mode 100644 index 0000000000..c82193d7ee --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q10_explain.snap @@ -0,0 +1,128 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q10" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST, customer_demographics.cd_dep_count ASC NULLS LAST, customer_demographics.cd_dep_employed_count ASC NULLS LAST, customer_demographics.cd_dep_college_count ASC NULLS LAST, fetch=100 | +| | Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(*) AS cnt2, customer_demographics.cd_credit_rating, count(*) AS cnt3, customer_demographics.cd_dep_count, count(*) AS cnt4, customer_demographics.cd_dep_employed_count, count(*) AS cnt5, customer_demographics.cd_dep_college_count, count(*) AS cnt6 | +| | Aggregate: groupBy=[[customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count | +| | Filter: __correlated_sq_2.mark OR __correlated_sq_3.mark | +| | Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count, __correlated_sq_2.mark, __correlated_sq_3.mark | +| | LeftMark Join: c.c_customer_sk = __correlated_sq_3.cs_ship_customer_sk | +| | LeftMark Join: c.c_customer_sk = __correlated_sq_2.ws_bill_customer_sk | +| | LeftSemi Join: c.c_customer_sk = __correlated_sq_1.ss_customer_sk | +| | Projection: c.c_customer_sk, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count | +| | Inner Join: c.c_current_cdemo_sk = customer_demographics.cd_demo_sk | +| | Projection: c.c_customer_sk, c.c_current_cdemo_sk | +| | Inner Join: c.c_current_addr_sk = ca.ca_address_sk | +| | SubqueryAlias: c | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | SubqueryAlias: ca | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_county IN ([LargeUtf8("Clinton County"), LargeUtf8("Platte County"), LargeUtf8("Franklin County"), LargeUtf8("Louisa County"), LargeUtf8("Harmon County")])] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating, cd_dep_count, cd_dep_employed_count, cd_dep_college_count] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: store_sales.ss_customer_sk | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy >= Int32(3), date_dim.d_moy <= Int32(6)] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_bill_customer_sk | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy >= Int32(3), date_dim.d_moy <= Int32(6)] | +| | SubqueryAlias: __correlated_sq_3 | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_customer_sk | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy >= Int32(3), date_dim.d_moy <= Int32(6)] | +| physical_plan | SortPreservingMergeExec: [cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@4 ASC NULLS LAST, cd_credit_rating@6 ASC NULLS LAST, cd_dep_count@8 ASC NULLS LAST, cd_dep_employed_count@10 ASC NULLS LAST, cd_dep_college_count@12 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@4 ASC NULLS LAST, cd_credit_rating@6 ASC NULLS LAST, cd_dep_count@8 ASC NULLS LAST, cd_dep_employed_count@10 ASC NULLS LAST, cd_dep_college_count@12 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, count(*)@8 as cnt1, cd_purchase_estimate@3 as cd_purchase_estimate, count(*)@8 as cnt2, cd_credit_rating@4 as cd_credit_rating, count(*)@8 as cnt3, cd_dep_count@5 as cd_dep_count, count(*)@8 as cnt4, cd_dep_employed_count@6 as cd_dep_employed_count, count(*)@8 as cnt5, cd_dep_college_count@7 as cd_dep_college_count, count(*)@8 as cnt6] | +| | AggregateExec: mode=FinalPartitioned, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating, cd_dep_count@5 as cd_dep_count, cd_dep_employed_count@6 as cd_dep_employed_count, cd_dep_college_count@7 as cd_dep_college_count], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_gender@0, cd_marital_status@1, cd_education_status@2, cd_purchase_estimate@3, cd_credit_rating@4, cd_dep_count@5, cd_dep_employed_count@6, cd_dep_college_count@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating, cd_dep_count@5 as cd_dep_count, cd_dep_employed_count@6 as cd_dep_employed_count, cd_dep_college_count@7 as cd_dep_college_count], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: mark@8 OR mark@9, projection=[cd_gender@0, cd_marital_status@1, cd_education_status@2, cd_purchase_estimate@3, cd_credit_rating@4, cd_dep_count@5, cd_dep_employed_count@6, cd_dep_college_count@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftMark, on=[(c_customer_sk@0, cs_ship_customer_sk@1)], projection=[cd_gender@1, cd_marital_status@2, cd_education_status@3, cd_purchase_estimate@4, cd_credit_rating@5, cd_dep_count@6, cd_dep_employed_count@7, cd_dep_college_count@8, mark@9, mark@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftMark, on=[(c_customer_sk@0, ws_bill_customer_sk@1)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(c_customer_sk@0, ss_customer_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_sk@0, cd_gender@3, cd_marital_status@4, cd_education_status@5, cd_purchase_estimate@6, cd_credit_rating@7, cd_dep_count@8, cd_dep_employed_count@9, cd_dep_college_count@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@2, ca_address_sk@0)], projection=[c_customer_sk@0, c_current_cdemo_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@2], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=Use ca_county@7 IN (SET) ([Literal { value: LargeUtf8("Clinton County") }, Literal { value: LargeUtf8("Platte County") }, Literal { value: LargeUtf8("Franklin County") }, Literal { value: LargeUtf8("Louisa County") }, Literal { value: LargeUtf8("Harmon County") }]), pruning_predicate=ca_county_null_count@2 != ca_county_row_count@3 AND ca_county_min@0 <= Clinton County AND Clinton County <= ca_county_max@1 OR ca_county_null_count@2 != ca_county_row_count@3 AND ca_county_min@0 <= Platte County AND Platte County <= ca_county_max@1 OR ca_county_null_count@2 != ca_county_row_count@3 AND ca_county_min@0 <= Franklin County AND Franklin County <= ca_county_max@1 OR ca_county_null_count@2 != ca_county_row_count@3 AND ca_county_min@0 <= Louisa County AND Louisa County <= ca_county_max@1 OR ca_county_null_count@2 != ca_county_row_count@3 AND ca_county_min@0 <= Harmon County AND Harmon County <= ca_county_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating, cd_dep_count, cd_dep_employed_count, cd_dep_college_count] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 >= 3 AND d_moy@8 <= 6, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_max@4 >= 3 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_min@7 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_sold_date_sk@0, ws_bill_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 >= 3 AND d_moy@8 <= 6, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_max@4 >= 3 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_min@7 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_ship_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 >= 3 AND d_moy@8 <= 6, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_max@4 >= 3 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_min@7 <= 6, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q11_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q11_explain.snap new file mode 100644 index 0000000000..9f538c8ddf --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q11_explain.snap @@ -0,0 +1,363 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q11" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: t_s_secyear.customer_id ASC NULLS LAST, t_s_secyear.customer_first_name ASC NULLS LAST, t_s_secyear.customer_last_name ASC NULLS LAST, t_s_secyear.customer_email_address ASC NULLS LAST, fetch=100 | +| | Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address | +| | Inner Join: t_s_firstyear.customer_id = t_w_secyear.customer_id Filter: CASE WHEN t_w_firstyear.year_total > Decimal128(Some(0),18,2) THEN CAST(t_w_secyear.year_total / t_w_firstyear.year_total AS Decimal128(33, 15)) ELSE Decimal128(Some(0),33,15) END > CASE WHEN t_s_firstyear.year_total > Decimal128(Some(0),18,2) THEN CAST(t_s_secyear.year_total / t_s_firstyear.year_total AS Decimal128(33, 15)) ELSE Decimal128(Some(0),33,15) END | +| | Projection: t_s_firstyear.customer_id, t_s_firstyear.year_total, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address, t_s_secyear.year_total, t_w_firstyear.year_total | +| | Inner Join: t_s_firstyear.customer_id = t_w_firstyear.customer_id | +| | Inner Join: t_s_firstyear.customer_id = t_s_secyear.customer_id | +| | SubqueryAlias: t_s_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total | +| | Filter: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) > Decimal128(Some(0),18,2) | +| | Projection: customer.c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(1999)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total | +| | Filter: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) > Decimal128(Some(0),18,2) | +| | Projection: customer.c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(1999)] | +| | SubqueryAlias: t_s_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2000)] | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2000)] | +| | SubqueryAlias: t_w_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total | +| | Filter: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) > Decimal128(Some(0),18,2) | +| | Projection: customer.c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(1999)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total | +| | Filter: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) > Decimal128(Some(0),18,2) | +| | Projection: customer.c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(1999)] | +| | SubqueryAlias: t_w_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2000)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2000)] | +| physical_plan | SortPreservingMergeExec: [customer_id@0 ASC NULLS LAST, customer_first_name@1 ASC NULLS LAST, customer_last_name@2 ASC NULLS LAST, customer_email_address@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[customer_id@0 ASC NULLS LAST, customer_first_name@1 ASC NULLS LAST, customer_last_name@2 ASC NULLS LAST, customer_email_address@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@2 > Some(0),18,2 THEN CAST(year_total@3 / year_total@2 AS Decimal128(33, 15)) ELSE Some(0),33,15 END > CASE WHEN year_total@0 > Some(0),18,2 THEN CAST(year_total@1 / year_total@0 AS Decimal128(33, 15)) ELSE Some(0),33,15 END, projection=[customer_id@2, customer_first_name@3, customer_last_name@4, customer_email_address@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@0, year_total@1, customer_id@2, customer_first_name@3, customer_last_name@4, customer_email_address@5, year_total@6, year_total@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@1 > Some(0),18,2 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@8 as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@1 > Some(0),18,2 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@8 as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, c_email_address@6 as customer_email_address, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, c_email_address@6 as customer_email_address, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@1 > Some(0),18,2 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@8 as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@1 > Some(0),18,2 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@8 as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@9 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_list_price@9, d_year@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_list_price@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q12_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q12_explain.snap new file mode 100644 index 0000000000..3ed2d15c52 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q12_explain.snap @@ -0,0 +1,54 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q12" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(web_sales.ws_ext_sales_price) AS itemrevenue, sum(web_sales.ws_ext_sales_price) * Decimal128(Some(100),20,0) / sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS revenueratio | +| | WindowAggr: windowExpr=[[sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Projection: web_sales.ws_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], full_filters=[item.i_category = LargeUtf8("Jewelry") OR item.i_category = LargeUtf8("Books") OR item.i_category = LargeUtf8("Women")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2002-03-22"), date_dim.d_date <= Date32("2002-04-21")] | +| physical_plan | SortPreservingMergeExec: [i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price, sum(web_sales.ws_ext_sales_price)@5 as itemrevenue, sum(web_sales.ws_ext_sales_price)@5 * Some(100),20,0 / sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@6 as revenueratio] | +| | WindowAggExec: wdw=[sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "sum(sum(web_sales.ws_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(27, 2), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_class@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_class@3], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_category@2, i_class@3, i_current_price@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id, i_item_desc@2 as i_item_desc, i_category@5 as i_category, i_class@4 as i_class, i_current_price@3 as i_current_price], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_ext_sales_price@1, i_item_id@2, i_item_desc@3, i_current_price@4, i_class@5, i_category@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@1, i_item_sk@0)], projection=[ws_sold_date_sk@0, ws_ext_sales_price@2, i_item_id@4, i_item_desc@5, i_current_price@6, i_class@7, i_category@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], predicate=i_category@12 = Jewelry OR i_category@12 = Books OR i_category@12 = Women, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Jewelry AND Jewelry <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Books AND Books <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Women AND Women <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2002-03-22 AND d_date@2 <= 2002-04-21, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2002-03-22 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2002-04-21, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q13_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q13_explain.snap new file mode 100644 index 0000000000..2feb74ea71 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q13_explain.snap @@ -0,0 +1,82 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q13" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Aggregate: groupBy=[[]], aggr=[[avg(CAST(store_sales.ss_quantity AS Float64)), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost)]] | +| | Projection: store_sales.ss_quantity, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_quantity, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk Filter: (customer_address.ca_state = LargeUtf8("CO") OR customer_address.ca_state = LargeUtf8("MI") OR customer_address.ca_state = LargeUtf8("MN")) AND store_sales.ss_net_profit >= Decimal128(Some(10000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(20000),7,2) OR (customer_address.ca_state = LargeUtf8("NC") OR customer_address.ca_state = LargeUtf8("NY") OR customer_address.ca_state = LargeUtf8("TX")) AND store_sales.ss_net_profit >= Decimal128(Some(15000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(30000),7,2) OR (customer_address.ca_state = LargeUtf8("CA") OR customer_address.ca_state = LargeUtf8("NE") OR customer_address.ca_state = LargeUtf8("TN")) AND store_sales.ss_net_profit >= Decimal128(Some(5000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(25000),7,2) | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk Filter: customer_demographics.cd_marital_status = LargeUtf8("U") AND customer_demographics.cd_education_status = LargeUtf8("4 yr Degree") AND store_sales.ss_sales_price >= Decimal128(Some(10000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(15000),7,2) AND household_demographics.hd_dep_count = Int32(3) OR customer_demographics.cd_marital_status = LargeUtf8("S") AND customer_demographics.cd_education_status = LargeUtf8("Unknown") AND store_sales.ss_sales_price >= Decimal128(Some(5000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(10000),7,2) AND household_demographics.hd_dep_count = Int32(1) OR customer_demographics.cd_marital_status = LargeUtf8("D") AND customer_demographics.cd_education_status = LargeUtf8("2 yr Degree") AND store_sales.ss_sales_price >= Decimal128(Some(15000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(20000),7,2) AND household_demographics.hd_dep_count = Int32(1) | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_net_profit, customer_demographics.cd_marital_status, customer_demographics.cd_education_status | +| | Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk Filter: customer_demographics.cd_marital_status = LargeUtf8("U") AND customer_demographics.cd_education_status = LargeUtf8("4 yr Degree") AND store_sales.ss_sales_price >= Decimal128(Some(10000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(15000),7,2) OR customer_demographics.cd_marital_status = LargeUtf8("S") AND customer_demographics.cd_education_status = LargeUtf8("Unknown") AND store_sales.ss_sales_price >= Decimal128(Some(5000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(10000),7,2) OR customer_demographics.cd_marital_status = LargeUtf8("D") AND customer_demographics.cd_education_status = LargeUtf8("2 yr Degree") AND store_sales.ss_sales_price >= Decimal128(Some(15000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(20000),7,2) | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_ext_sales_price, ss_ext_wholesale_cost, ss_net_profit], full_filters=[store_sales.ss_net_profit >= Decimal128(Some(10000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(20000),7,2) OR store_sales.ss_net_profit >= Decimal128(Some(15000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(30000),7,2) OR store_sales.ss_net_profit >= Decimal128(Some(5000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(25000),7,2), store_sales.ss_sales_price >= Decimal128(Some(10000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(15000),7,2) OR store_sales.ss_sales_price >= Decimal128(Some(5000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(10000),7,2) OR store_sales.ss_sales_price >= Decimal128(Some(15000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(20000),7,2)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], full_filters=[customer_demographics.cd_marital_status = LargeUtf8("U") AND customer_demographics.cd_education_status = LargeUtf8("4 yr Degree") OR customer_demographics.cd_marital_status = LargeUtf8("S") AND customer_demographics.cd_education_status = LargeUtf8("Unknown") OR customer_demographics.cd_marital_status = LargeUtf8("D") AND customer_demographics.cd_education_status = LargeUtf8("2 yr Degree")] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_dep_count], full_filters=[household_demographics.hd_dep_count = Int32(3) OR household_demographics.hd_dep_count = Int32(1), household_demographics.hd_dep_count = Int32(3) OR household_demographics.hd_dep_count = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state], full_filters=[customer_address.ca_country = LargeUtf8("United States"), customer_address.ca_state IN ([LargeUtf8("CO"), LargeUtf8("MI"), LargeUtf8("MN"), LargeUtf8("NC"), LargeUtf8("NY"), LargeUtf8("TX"), LargeUtf8("CA"), LargeUtf8("NE"), LargeUtf8("TN")]), customer_address.ca_state IN ([LargeUtf8("CO"), LargeUtf8("MI"), LargeUtf8("MN"), LargeUtf8("NC"), LargeUtf8("NY"), LargeUtf8("TX"), LargeUtf8("CA"), LargeUtf8("NE"), LargeUtf8("TN")])] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001)] | +| physical_plan | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_ext_sales_price), avg(store_sales.ss_ext_wholesale_cost), sum(store_sales.ss_ext_wholesale_cost)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_quantity@1, ss_ext_sales_price@2, ss_ext_wholesale_cost@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], filter=(ca_state@1 = CO OR ca_state@1 = MI OR ca_state@1 = MN) AND ss_net_profit@0 >= Some(10000),7,2 AND ss_net_profit@0 <= Some(20000),7,2 OR (ca_state@1 = NC OR ca_state@1 = NY OR ca_state@1 = TX) AND ss_net_profit@0 >= Some(15000),7,2 AND ss_net_profit@0 <= Some(30000),7,2 OR (ca_state@1 = CA OR ca_state@1 = NE OR ca_state@1 = TN) AND ss_net_profit@0 >= Some(5000),7,2 AND ss_net_profit@0 <= Some(25000),7,2, projection=[ss_sold_date_sk@0, ss_quantity@2, ss_ext_sales_price@3, ss_ext_wholesale_cost@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], filter=cd_marital_status@1 = U AND cd_education_status@2 = 4 yr Degree AND ss_sales_price@0 >= Some(10000),7,2 AND ss_sales_price@0 <= Some(15000),7,2 AND hd_dep_count@3 = 3 OR cd_marital_status@1 = S AND cd_education_status@2 = Unknown AND ss_sales_price@0 >= Some(5000),7,2 AND ss_sales_price@0 <= Some(10000),7,2 AND hd_dep_count@3 = 1 OR cd_marital_status@1 = D AND cd_education_status@2 = 2 yr Degree AND ss_sales_price@0 >= Some(15000),7,2 AND ss_sales_price@0 <= Some(20000),7,2 AND hd_dep_count@3 = 1, projection=[ss_sold_date_sk@0, ss_addr_sk@2, ss_quantity@3, ss_ext_sales_price@5, ss_ext_wholesale_cost@6, ss_net_profit@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_cdemo_sk@1, cd_demo_sk@0)], filter=cd_marital_status@1 = U AND cd_education_status@2 = 4 yr Degree AND ss_sales_price@0 >= Some(10000),7,2 AND ss_sales_price@0 <= Some(15000),7,2 OR cd_marital_status@1 = S AND cd_education_status@2 = Unknown AND ss_sales_price@0 >= Some(5000),7,2 AND ss_sales_price@0 <= Some(10000),7,2 OR cd_marital_status@1 = D AND cd_education_status@2 = 2 yr Degree AND ss_sales_price@0 >= Some(15000),7,2 AND ss_sales_price@0 <= Some(20000),7,2, projection=[ss_sold_date_sk@0, ss_hdemo_sk@2, ss_addr_sk@3, ss_quantity@4, ss_sales_price@5, ss_ext_sales_price@6, ss_ext_wholesale_cost@7, ss_net_profit@8, cd_marital_status@10, cd_education_status@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@4, s_store_sk@0)], projection=[ss_sold_date_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_quantity@5, ss_sales_price@6, ss_ext_sales_price@7, ss_ext_wholesale_cost@8, ss_net_profit@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_ext_sales_price, ss_ext_wholesale_cost, ss_net_profit], predicate=(ss_net_profit@22 >= Some(10000),7,2 AND ss_net_profit@22 <= Some(20000),7,2 OR ss_net_profit@22 >= Some(15000),7,2 AND ss_net_profit@22 <= Some(30000),7,2 OR ss_net_profit@22 >= Some(5000),7,2 AND ss_net_profit@22 <= Some(25000),7,2) AND (ss_sales_price@13 >= Some(10000),7,2 AND ss_sales_price@13 <= Some(15000),7,2 OR ss_sales_price@13 >= Some(5000),7,2 AND ss_sales_price@13 <= Some(10000),7,2 OR ss_sales_price@13 >= Some(15000),7,2 AND ss_sales_price@13 <= Some(20000),7,2), pruning_predicate=(ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_max@0 >= Some(10000),7,2 AND ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_min@3 <= Some(20000),7,2 OR ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_max@0 >= Some(15000),7,2 AND ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_min@3 <= Some(30000),7,2 OR ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_max@0 >= Some(5000),7,2 AND ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_min@3 <= Some(25000),7,2) AND (ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_max@4 >= Some(10000),7,2 AND ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_min@7 <= Some(15000),7,2 OR ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_max@4 >= Some(5000),7,2 AND ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_min@7 <= Some(10000),7,2 OR ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_max@4 >= Some(15000),7,2 AND ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_min@7 <= Some(20000),7,2), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], predicate=cd_marital_status@2 = U AND cd_education_status@3 = 4 yr Degree OR cd_marital_status@2 = S AND cd_education_status@3 = Unknown OR cd_marital_status@2 = D AND cd_education_status@3 = 2 yr Degree, pruning_predicate=cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= U AND U <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= 4 yr Degree AND 4 yr Degree <= cd_education_status_max@5 OR cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= S AND S <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Unknown AND Unknown <= cd_education_status_max@5 OR cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= D AND D <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= 2 yr Degree AND 2 yr Degree <= cd_education_status_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk, hd_dep_count], predicate=(hd_dep_count@3 = 3 OR hd_dep_count@3 = 1) AND (hd_dep_count@3 = 3 OR hd_dep_count@3 = 1), pruning_predicate=(hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 3 AND 3 <= hd_dep_count_max@1 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1) AND (hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 3 AND 3 <= hd_dep_count_max@1 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state], predicate=ca_country@10 = United States AND Use ca_state@8 IN (SET) ([Literal { value: LargeUtf8("CO") }, Literal { value: LargeUtf8("MI") }, Literal { value: LargeUtf8("MN") }, Literal { value: LargeUtf8("NC") }, Literal { value: LargeUtf8("NY") }, Literal { value: LargeUtf8("TX") }, Literal { value: LargeUtf8("CA") }, Literal { value: LargeUtf8("NE") }, Literal { value: LargeUtf8("TN") }]) AND Use ca_state@8 IN (SET) ([Literal { value: LargeUtf8("CO") }, Literal { value: LargeUtf8("MI") }, Literal { value: LargeUtf8("MN") }, Literal { value: LargeUtf8("NC") }, Literal { value: LargeUtf8("NY") }, Literal { value: LargeUtf8("TX") }, Literal { value: LargeUtf8("CA") }, Literal { value: LargeUtf8("NE") }, Literal { value: LargeUtf8("TN") }]), pruning_predicate=ca_country_null_count@2 != ca_country_row_count@3 AND ca_country_min@0 <= United States AND United States <= ca_country_max@1 AND (ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= CO AND CO <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= MI AND MI <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= MN AND MN <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NC AND NC <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NY AND NY <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= TX AND TX <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= CA AND CA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NE AND NE <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= TN AND TN <= ca_state_max@5) AND (ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= CO AND CO <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= MI AND MI <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= MN AND MN <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NC AND NC <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NY AND NY <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= TX AND TX <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= CA AND CA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NE AND NE <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= TN AND TN <= ca_state_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q15_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q15_explain.snap new file mode 100644 index 0000000000..4b654f6ff8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q15_explain.snap @@ -0,0 +1,60 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q15" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer_address.ca_zip ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[customer_address.ca_zip]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Projection: catalog_sales.cs_sales_price, customer_address.ca_zip | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sales_price, customer_address.ca_zip | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([LargeUtf8("85669"), LargeUtf8("86197"), LargeUtf8("88274"), LargeUtf8("83405"), LargeUtf8("86475"), LargeUtf8("85392"), LargeUtf8("85460"), LargeUtf8("80348"), LargeUtf8("81792")]) OR customer_address.ca_state = LargeUtf8("CA") OR customer_address.ca_state = LargeUtf8("WA") OR customer_address.ca_state = LargeUtf8("GA") OR catalog_sales.cs_sales_price > Decimal128(Some(50000),7,2) | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sales_price, customer.c_current_addr_sk | +| | Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_sales_price] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state, ca_zip] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_qoy = Int32(2), date_dim.d_year = Int32(2002)] | +| physical_plan | SortPreservingMergeExec: [ca_zip@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[ca_zip@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_zip@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_zip@1 as ca_zip], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_sales_price@1, ca_zip@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@2, ca_address_sk@0)], filter=Use substr(ca_zip@2, 1, 5) IN (SET) ([Literal { value: LargeUtf8("85669") }, Literal { value: LargeUtf8("86197") }, Literal { value: LargeUtf8("88274") }, Literal { value: LargeUtf8("83405") }, Literal { value: LargeUtf8("86475") }, Literal { value: LargeUtf8("85392") }, Literal { value: LargeUtf8("85460") }, Literal { value: LargeUtf8("80348") }, Literal { value: LargeUtf8("81792") }]) OR ca_state@1 = CA OR ca_state@1 = WA OR ca_state@1 = GA OR cs_sales_price@0 > Some(50000),7,2, projection=[cs_sold_date_sk@0, cs_sales_price@1, ca_zip@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_customer_sk@1, c_customer_sk@0)], projection=[cs_sold_date_sk@0, cs_sales_price@2, c_current_addr_sk@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_qoy@10 = 2 AND d_year@6 = 2002, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 2 AND 2 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2002 AND 2002 <= d_year_max@5, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q16_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q16_explain.snap new file mode 100644 index 0000000000..b87328caaf --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q16_explain.snap @@ -0,0 +1,91 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q16" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: order count, total shipping cost, total net profit | +| | Sort: count(DISTINCT cs1.cs_order_number) AS order count ASC NULLS LAST, fetch=100 | +| | Projection: count(DISTINCT cs1.cs_order_number) AS order count, sum(cs1.cs_ext_ship_cost) AS total shipping cost, sum(cs1.cs_net_profit) AS total net profit, count(DISTINCT cs1.cs_order_number) | +| | Projection: count(alias1) AS count(DISTINCT cs1.cs_order_number), sum(alias2) AS sum(cs1.cs_ext_ship_cost), sum(alias3) AS sum(cs1.cs_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[count(alias1), sum(alias2), sum(alias3)]] | +| | Aggregate: groupBy=[[cs1.cs_order_number AS alias1]], aggr=[[sum(cs1.cs_ext_ship_cost) AS alias2, sum(cs1.cs_net_profit) AS alias3]] | +| | LeftAnti Join: cs1.cs_order_number = __correlated_sq_2.cr_order_number | +| | Projection: cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit | +| | LeftSemi Join: cs1.cs_order_number = __correlated_sq_1.cs_order_number Filter: cs1.cs_warehouse_sk != __correlated_sq_1.cs_warehouse_sk | +| | Projection: cs1.cs_warehouse_sk, cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit | +| | Inner Join: cs1.cs_call_center_sk = call_center.cc_call_center_sk | +| | Projection: cs1.cs_call_center_sk, cs1.cs_warehouse_sk, cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit | +| | Inner Join: cs1.cs_ship_addr_sk = customer_address.ca_address_sk | +| | Projection: cs1.cs_ship_addr_sk, cs1.cs_call_center_sk, cs1.cs_warehouse_sk, cs1.cs_order_number, cs1.cs_ext_ship_cost, cs1.cs_net_profit | +| | Inner Join: cs1.cs_ship_date_sk = date_dim.d_date_sk | +| | SubqueryAlias: cs1 | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_ship_date_sk, cs_ship_addr_sk, cs_call_center_sk, cs_warehouse_sk, cs_order_number, cs_ext_ship_cost, cs_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("1999-05-01"), date_dim.d_date <= Date32("1999-06-30")] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = LargeUtf8("ID")] | +| | BytesProcessedNode | +| | TableScan: call_center projection=[cc_call_center_sk], full_filters=[call_center.cc_county IN ([LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County")])] | +| | SubqueryAlias: __correlated_sq_1 | +| | SubqueryAlias: cs2 | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_warehouse_sk, cs_order_number] | +| | SubqueryAlias: __correlated_sq_2 | +| | SubqueryAlias: cr1 | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_order_number] | +| physical_plan | ProjectionExec: expr=[order count@0 as order count, total shipping cost@1 as total shipping cost, total net profit@2 as total net profit] | +| | ProjectionExec: expr=[count(alias1)@0 as order count, sum(alias2)@1 as total shipping cost, sum(alias3)@2 as total net profit, count(alias1)@0 as count(DISTINCT cs1.cs_order_number)] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] | +| | AggregateExec: mode=SinglePartitioned, gby=[cs_order_number@0 as alias1], aggr=[alias2, alias3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(cs_order_number@0, cr_order_number@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(cs_order_number@1, cs_order_number@1)], filter=cs_warehouse_sk@0 != cs_warehouse_sk@1, projection=[cs_order_number@1, cs_ext_ship_cost@2, cs_net_profit@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_order_number@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_call_center_sk@0, cc_call_center_sk@0)], projection=[cs_warehouse_sk@1, cs_order_number@2, cs_ext_ship_cost@3, cs_net_profit@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_call_center_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_ship_addr_sk@0, ca_address_sk@0)], projection=[cs_call_center_sk@1, cs_warehouse_sk@2, cs_order_number@3, cs_ext_ship_cost@4, cs_net_profit@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_ship_date_sk@0, d_date_sk@0)], projection=[cs_ship_addr_sk@1, cs_call_center_sk@2, cs_warehouse_sk@3, cs_order_number@4, cs_ext_ship_cost@5, cs_net_profit@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_ship_date_sk, cs_ship_addr_sk, cs_call_center_sk, cs_warehouse_sk, cs_order_number, cs_ext_ship_cost, cs_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 1999-05-01 AND d_date@2 <= 1999-06-30, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 1999-05-01 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 1999-06-30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_state@8 = ID, pruning_predicate=ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= ID AND ID <= ca_state_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cc_call_center_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/call_center/call_center.parquet]]}, projection=[cc_call_center_sk], predicate=Use cc_county@25 IN (SET) ([Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }]), pruning_predicate=cc_county_null_count@2 != cc_county_row_count@3 AND cc_county_min@0 <= Williamson County AND Williamson County <= cc_county_max@1 OR cc_county_null_count@2 != cc_county_row_count@3 AND cc_county_min@0 <= Williamson County AND Williamson County <= cc_county_max@1 OR cc_county_null_count@2 != cc_county_row_count@3 AND cc_county_min@0 <= Williamson County AND Williamson County <= cc_county_max@1 OR cc_county_null_count@2 != cc_county_row_count@3 AND cc_county_min@0 <= Williamson County AND Williamson County <= cc_county_max@1 OR cc_county_null_count@2 != cc_county_row_count@3 AND cc_county_min@0 <= Williamson County AND Williamson County <= cc_county_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_warehouse_sk, cs_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_order_number@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_order_number] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q17_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q17_explain.snap new file mode 100644 index 0000000000..eb1370c781 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q17_explain.snap @@ -0,0 +1,115 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q17" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, store.s_state ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, item.i_item_desc, store.s_state, count(store_sales.ss_quantity) AS store_sales_quantitycount, avg(store_sales.ss_quantity) AS store_sales_quantityave, stddev(store_sales.ss_quantity) AS store_sales_quantitystdev, stddev(store_sales.ss_quantity) / avg(store_sales.ss_quantity) AS store_sales_quantitycov, count(store_returns.sr_return_quantity) AS store_returns_quantitycount, avg(store_returns.sr_return_quantity) AS store_returns_quantityave, stddev(store_returns.sr_return_quantity) AS store_returns_quantitystdev, stddev(store_returns.sr_return_quantity) / avg(store_returns.sr_return_quantity) AS store_returns_quantitycov, count(catalog_sales.cs_quantity) AS catalog_sales_quantitycount, avg(catalog_sales.cs_quantity) AS catalog_sales_quantityave, stddev(catalog_sales.cs_quantity) AS catalog_sales_quantitystdev, stddev(catalog_sales.cs_quantity) / avg(catalog_sales.cs_quantity) AS catalog_sales_quantitycov | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, store.s_state]], aggr=[[count(store_sales.ss_quantity), avg(CAST(store_sales.ss_quantity AS Float64)), stddev(store_sales.ss_quantity), count(store_returns.sr_return_quantity), avg(CAST(store_returns.sr_return_quantity AS Float64)), stddev(store_returns.sr_return_quantity), count(catalog_sales.cs_quantity), avg(CAST(catalog_sales.cs_quantity AS Float64)), stddev(catalog_sales.cs_quantity)]] | +| | Projection: store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_state, item.i_item_id, item.i_item_desc | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_state | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity | +| | Inner Join: catalog_sales.cs_sold_date_sk = d3.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity | +| | Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity | +| | Inner Join: store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk, store_returns.sr_item_sk = catalog_sales.cs_item_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_item_sk, store_returns.sr_customer_sk, store_returns.sr_return_quantity | +| | Inner Join: store_sales.ss_customer_sk = store_returns.sr_customer_sk, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_quarter_name = LargeUtf8("1999Q1")] | +| | SubqueryAlias: d2 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_quarter_name = LargeUtf8("1999Q1") OR date_dim.d_quarter_name = LargeUtf8("1999Q2") OR date_dim.d_quarter_name = LargeUtf8("1999Q3")] | +| | SubqueryAlias: d3 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_quarter_name = LargeUtf8("1999Q1") OR date_dim.d_quarter_name = LargeUtf8("1999Q2") OR date_dim.d_quarter_name = LargeUtf8("1999Q3")] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_state] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_state@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_state@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_state@2 as s_state, count(store_sales.ss_quantity)@3 as store_sales_quantitycount, avg(store_sales.ss_quantity)@4 as store_sales_quantityave, stddev(store_sales.ss_quantity)@5 as store_sales_quantitystdev, stddev(store_sales.ss_quantity)@5 / avg(store_sales.ss_quantity)@4 as store_sales_quantitycov, count(store_returns.sr_return_quantity)@6 as store_returns_quantitycount, avg(store_returns.sr_return_quantity)@7 as store_returns_quantityave, stddev(store_returns.sr_return_quantity)@8 as store_returns_quantitystdev, stddev(store_returns.sr_return_quantity)@8 / avg(store_returns.sr_return_quantity)@7 as store_returns_quantitycov, count(catalog_sales.cs_quantity)@9 as catalog_sales_quantitycount, avg(catalog_sales.cs_quantity)@10 as catalog_sales_quantityave, stddev(catalog_sales.cs_quantity)@11 as catalog_sales_quantitystdev, stddev(catalog_sales.cs_quantity)@11 / avg(catalog_sales.cs_quantity)@10 as catalog_sales_quantitycov] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_state@2 as s_state], aggr=[count(store_sales.ss_quantity), avg(store_sales.ss_quantity), stddev(store_sales.ss_quantity), count(store_returns.sr_return_quantity), avg(store_returns.sr_return_quantity), stddev(store_returns.sr_return_quantity), count(catalog_sales.cs_quantity), avg(catalog_sales.cs_quantity), stddev(catalog_sales.cs_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, s_state@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@4 as i_item_id, i_item_desc@5 as i_item_desc, s_state@3 as s_state], aggr=[count(store_sales.ss_quantity), avg(store_sales.ss_quantity), stddev(store_sales.ss_quantity), count(store_returns.sr_return_quantity), avg(store_returns.sr_return_quantity), stddev(store_returns.sr_return_quantity), count(catalog_sales.cs_quantity), avg(catalog_sales.cs_quantity), stddev(catalog_sales.cs_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_quantity@1, sr_return_quantity@2, cs_quantity@3, s_state@4, i_item_id@6, i_item_desc@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_item_sk@0, ss_quantity@2, sr_return_quantity@3, cs_quantity@4, s_state@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@4, d_date_sk@0)], projection=[ss_item_sk@0, ss_store_sk@1, ss_quantity@2, sr_return_quantity@3, cs_quantity@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@3, d_date_sk@0)], projection=[ss_item_sk@0, ss_store_sk@1, ss_quantity@2, sr_return_quantity@4, cs_sold_date_sk@5, cs_quantity@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_returned_date_sk@4, sr_return_quantity@5, cs_sold_date_sk@6, cs_quantity@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_customer_sk@6, cs_bill_customer_sk@1), (sr_item_sk@5, cs_item_sk@2)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_returned_date_sk@4, sr_return_quantity@7, cs_sold_date_sk@8, cs_quantity@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@6, sr_item_sk@5], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@2, sr_customer_sk@2), (ss_item_sk@1, sr_item_sk@1), (ss_ticket_number@4, sr_ticket_number@3)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@3, ss_quantity@5, sr_returned_date_sk@6, sr_item_sk@7, sr_customer_sk@8, sr_return_quantity@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@2, ss_item_sk@1, ss_ticket_number@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@2, sr_item_sk@1, sr_ticket_number@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1, cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_quarter_name@15 = 1999Q1, pruning_predicate=d_quarter_name_null_count@2 != d_quarter_name_row_count@3 AND d_quarter_name_min@0 <= 1999Q1 AND 1999Q1 <= d_quarter_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_quarter_name@15 = 1999Q1 OR d_quarter_name@15 = 1999Q2 OR d_quarter_name@15 = 1999Q3, pruning_predicate=d_quarter_name_null_count@2 != d_quarter_name_row_count@3 AND d_quarter_name_min@0 <= 1999Q1 AND 1999Q1 <= d_quarter_name_max@1 OR d_quarter_name_null_count@2 != d_quarter_name_row_count@3 AND d_quarter_name_min@0 <= 1999Q2 AND 1999Q2 <= d_quarter_name_max@1 OR d_quarter_name_null_count@2 != d_quarter_name_row_count@3 AND d_quarter_name_min@0 <= 1999Q3 AND 1999Q3 <= d_quarter_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_quarter_name@15 = 1999Q1 OR d_quarter_name@15 = 1999Q2 OR d_quarter_name@15 = 1999Q3, pruning_predicate=d_quarter_name_null_count@2 != d_quarter_name_row_count@3 AND d_quarter_name_min@0 <= 1999Q1 AND 1999Q1 <= d_quarter_name_max@1 OR d_quarter_name_null_count@2 != d_quarter_name_row_count@3 AND d_quarter_name_min@0 <= 1999Q2 AND 1999Q2 <= d_quarter_name_max@1 OR d_quarter_name_null_count@2 != d_quarter_name_row_count@3 AND d_quarter_name_min@0 <= 1999Q3 AND 1999Q3 <= d_quarter_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q18_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q18_explain.snap new file mode 100644 index 0000000000..b6ae5cce95 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q18_explain.snap @@ -0,0 +1,103 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q18" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer_address.ca_country ASC NULLS LAST, customer_address.ca_state ASC NULLS LAST, customer_address.ca_county ASC NULLS LAST, item.i_item_id ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, customer_address.ca_country, customer_address.ca_state, customer_address.ca_county, avg(catalog_sales.cs_quantity) AS agg1, avg(catalog_sales.cs_list_price) AS agg2, avg(catalog_sales.cs_coupon_amt) AS agg3, avg(catalog_sales.cs_sales_price) AS agg4, avg(catalog_sales.cs_net_profit) AS agg5, avg(customer.c_birth_year) AS agg6, avg(cd1.cd_dep_count) AS agg7 | +| | Aggregate: groupBy=[[ROLLUP (item.i_item_id, customer_address.ca_country, customer_address.ca_state, customer_address.ca_county)]], aggr=[[avg(CAST(catalog_sales.cs_quantity AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_list_price AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_coupon_amt AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_sales_price AS Decimal128(12, 2))), avg(CAST(catalog_sales.cs_net_profit AS Decimal128(12, 2))), avg(CAST(customer.c_birth_year AS Decimal128(12, 2))), avg(CAST(cd1.cd_dep_count AS Decimal128(12, 2)))]] | +| | Projection: catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_birth_year, customer_address.ca_county, customer_address.ca_state, customer_address.ca_country, item.i_item_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_birth_year, customer_address.ca_county, customer_address.ca_state, customer_address.ca_country | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_birth_year, customer_address.ca_county, customer_address.ca_state, customer_address.ca_country | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_current_addr_sk, customer.c_birth_year | +| | Inner Join: customer.c_current_cdemo_sk = cd2.cd_demo_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count, customer.c_current_cdemo_sk, customer.c_current_addr_sk, customer.c_birth_year | +| | Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, catalog_sales.cs_net_profit, cd1.cd_dep_count | +| | Inner Join: catalog_sales.cs_bill_cdemo_sk = cd1.cd_demo_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_bill_cdemo_sk, cs_item_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt, cs_net_profit] | +| | SubqueryAlias: cd1 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_dep_count], full_filters=[customer_demographics.cd_gender = LargeUtf8("M"), customer_demographics.cd_education_status = LargeUtf8("Primary")] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk, c_birth_year], full_filters=[customer.c_birth_month IN ([Int32(1), Int32(2), Int32(9), Int32(5), Int32(11), Int32(3)])] | +| | SubqueryAlias: cd2 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county, ca_state, ca_country], full_filters=[customer_address.ca_state IN ([LargeUtf8("MS"), LargeUtf8("NE"), LargeUtf8("IA"), LargeUtf8("MI"), LargeUtf8("GA"), LargeUtf8("NY"), LargeUtf8("CO")])] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1998)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| physical_plan | SortPreservingMergeExec: [ca_country@1 ASC NULLS LAST, ca_state@2 ASC NULLS LAST, ca_county@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[ca_country@1 ASC NULLS LAST, ca_state@2 ASC NULLS LAST, ca_county@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, ca_country@1 as ca_country, ca_state@2 as ca_state, ca_county@3 as ca_county, avg(catalog_sales.cs_quantity)@5 as agg1, avg(catalog_sales.cs_list_price)@6 as agg2, avg(catalog_sales.cs_coupon_amt)@7 as agg3, avg(catalog_sales.cs_sales_price)@8 as agg4, avg(catalog_sales.cs_net_profit)@9 as agg5, avg(customer.c_birth_year)@10 as agg6, avg(cd1.cd_dep_count)@11 as agg7] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, ca_country@1 as ca_country, ca_state@2 as ca_state, ca_county@3 as ca_county, __grouping_id@4 as __grouping_id], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price), avg(catalog_sales.cs_net_profit), avg(customer.c_birth_year), avg(cd1.cd_dep_count)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, ca_country@1, ca_state@2, ca_county@3, __grouping_id@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[(NULL as i_item_id, NULL as ca_country, NULL as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, NULL as ca_country, NULL as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, ca_country@9 as ca_country, NULL as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, ca_country@9 as ca_country, ca_state@8 as ca_state, NULL as ca_county), (i_item_id@10 as i_item_id, ca_country@9 as ca_country, ca_state@8 as ca_state, ca_county@7 as ca_county)], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price), avg(catalog_sales.cs_net_profit), avg(customer.c_birth_year), avg(cd1.cd_dep_count)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_quantity@1, cs_list_price@2, cs_sales_price@3, cs_coupon_amt@4, cs_net_profit@5, cd_dep_count@6, c_birth_year@7, ca_county@8, ca_state@9, ca_country@10, i_item_id@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_item_sk@1, cs_quantity@2, cs_list_price@3, cs_sales_price@4, cs_coupon_amt@5, cs_net_profit@6, cd_dep_count@7, c_birth_year@8, ca_county@9, ca_state@10, ca_country@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@8, ca_address_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@1, cs_quantity@2, cs_list_price@3, cs_sales_price@4, cs_coupon_amt@5, cs_net_profit@6, cd_dep_count@7, c_birth_year@9, ca_county@11, ca_state@12, ca_country@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@8], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@8, cd_demo_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@1, cs_quantity@2, cs_list_price@3, cs_sales_price@4, cs_coupon_amt@5, cs_net_profit@6, cd_dep_count@7, c_current_addr_sk@9, c_birth_year@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@8], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_customer_sk@1, c_customer_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@2, cs_quantity@3, cs_list_price@4, cs_sales_price@5, cs_coupon_amt@6, cs_net_profit@7, cd_dep_count@8, c_current_cdemo_sk@10, c_current_addr_sk@11, c_birth_year@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_cdemo_sk@2, cd_demo_sk@0)], projection=[cs_sold_date_sk@0, cs_bill_customer_sk@1, cs_item_sk@3, cs_quantity@4, cs_list_price@5, cs_sales_price@6, cs_coupon_amt@7, cs_net_profit@8, cd_dep_count@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_cdemo_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_bill_cdemo_sk, cs_item_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt, cs_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_dep_count], predicate=cd_gender@1 = M AND cd_education_status@3 = Primary, pruning_predicate=cd_gender_null_count@2 != cd_gender_row_count@3 AND cd_gender_min@0 <= M AND M <= cd_gender_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Primary AND Primary <= cd_education_status_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk, c_birth_year], predicate=Use c_birth_month@12 IN (SET) ([Literal { value: Int32(1) }, Literal { value: Int32(2) }, Literal { value: Int32(9) }, Literal { value: Int32(5) }, Literal { value: Int32(11) }, Literal { value: Int32(3) }]), pruning_predicate=c_birth_month_null_count@2 != c_birth_month_row_count@3 AND c_birth_month_min@0 <= 1 AND 1 <= c_birth_month_max@1 OR c_birth_month_null_count@2 != c_birth_month_row_count@3 AND c_birth_month_min@0 <= 2 AND 2 <= c_birth_month_max@1 OR c_birth_month_null_count@2 != c_birth_month_row_count@3 AND c_birth_month_min@0 <= 9 AND 9 <= c_birth_month_max@1 OR c_birth_month_null_count@2 != c_birth_month_row_count@3 AND c_birth_month_min@0 <= 5 AND 5 <= c_birth_month_max@1 OR c_birth_month_null_count@2 != c_birth_month_row_count@3 AND c_birth_month_min@0 <= 11 AND 11 <= c_birth_month_max@1 OR c_birth_month_null_count@2 != c_birth_month_row_count@3 AND c_birth_month_min@0 <= 3 AND 3 <= c_birth_month_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county, ca_state, ca_country], predicate=Use ca_state@8 IN (SET) ([Literal { value: LargeUtf8("MS") }, Literal { value: LargeUtf8("NE") }, Literal { value: LargeUtf8("IA") }, Literal { value: LargeUtf8("MI") }, Literal { value: LargeUtf8("GA") }, Literal { value: LargeUtf8("NY") }, Literal { value: LargeUtf8("CO") }]), pruning_predicate=ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= MS AND MS <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= NE AND NE <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= IA AND IA <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= MI AND MI <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= GA AND GA <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= NY AND NY <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= CO AND CO <= ca_state_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1998, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q19_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q19_explain.snap new file mode 100644 index 0000000000..c89e8c62a7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q19_explain.snap @@ -0,0 +1,90 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q19" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: brand_id, brand, item.i_manufact_id, item.i_manufact, ext_price | +| | Sort: ext_price DESC NULLS FIRST, item.i_brand ASC NULLS LAST, item.i_brand_id ASC NULLS LAST, item.i_manufact_id ASC NULLS LAST, item.i_manufact ASC NULLS LAST, fetch=100 | +| | Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, item.i_manufact_id, item.i_manufact, sum(store_sales.ss_ext_sales_price) AS ext_price, item.i_brand, item.i_brand_id | +| | Aggregate: groupBy=[[item.i_brand, item.i_brand_id, item.i_manufact_id, item.i_manufact]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) != substr(store.s_zip, Int64(1), Int64(5)) | +| | Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact, customer_address.ca_zip | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact, customer.c_current_addr_sk | +| | Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand, item.i_manufact_id, item.i_manufact | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price | +| | Inner Join: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(11), date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand, i_manufact_id, i_manufact], full_filters=[item.i_manager_id = Int32(8)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_zip] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_zip] | +| physical_plan | ProjectionExec: expr=[brand_id@0 as brand_id, brand@1 as brand, i_manufact_id@2 as i_manufact_id, i_manufact@3 as i_manufact, ext_price@4 as ext_price] | +| | SortPreservingMergeExec: [ext_price@4 DESC, i_brand@5 ASC NULLS LAST, i_brand_id@6 ASC NULLS LAST, i_manufact_id@2 ASC NULLS LAST, i_manufact@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[ext_price@4 DESC, i_brand@5 ASC NULLS LAST, i_brand_id@6 ASC NULLS LAST, i_manufact_id@2 ASC NULLS LAST, i_manufact@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_brand_id@1 as brand_id, i_brand@0 as brand, i_manufact_id@2 as i_manufact_id, i_manufact@3 as i_manufact, sum(store_sales.ss_ext_sales_price)@4 as ext_price, i_brand@0 as i_brand, i_brand_id@1 as i_brand_id] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_brand@0 as i_brand, i_brand_id@1 as i_brand_id, i_manufact_id@2 as i_manufact_id, i_manufact@3 as i_manufact], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_brand@0, i_brand_id@1, i_manufact_id@2, i_manufact@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_brand@2 as i_brand, i_brand_id@1 as i_brand_id, i_manufact_id@3 as i_manufact_id, i_manufact@4 as i_manufact], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)], filter=substr(ca_zip@0, 1, 5) != substr(s_zip@1, 1, 5), projection=[ss_ext_sales_price@1, i_brand_id@2, i_brand@3, i_manufact_id@4, i_manufact@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@6, ca_address_sk@0)], projection=[ss_store_sk@0, ss_ext_sales_price@1, i_brand_id@2, i_brand@3, i_manufact_id@4, i_manufact@5, ca_zip@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@6], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@0, c_customer_sk@0)], projection=[ss_store_sk@1, ss_ext_sales_price@2, i_brand_id@3, i_brand@4, i_manufact_id@5, i_manufact@6, c_current_addr_sk@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_customer_sk@1, ss_store_sk@2, ss_ext_sales_price@3, i_brand_id@5, i_brand@6, i_manufact_id@7, i_manufact@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_customer_sk@3, ss_store_sk@4, ss_ext_sales_price@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 11 AND d_year@6 = 1999, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 11 AND 11 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_brand, i_manufact_id, i_manufact], predicate=i_manager_id@20 = 8, pruning_predicate=i_manager_id_null_count@2 != i_manager_id_row_count@3 AND i_manager_id_min@0 <= 8 AND 8 <= i_manager_id_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_zip] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q1_explain.snap new file mode 100644 index 0000000000..c03f958c0f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q1_explain.snap @@ -0,0 +1,104 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q1" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer.c_customer_id ASC NULLS LAST, fetch=100 | +| | Projection: customer.c_customer_id | +| | Inner Join: ctr1.ctr_store_sk = __scalar_sq_1.ctr_store_sk Filter: CAST(ctr1.ctr_total_return AS Decimal128(30, 15)) > __scalar_sq_1.avg(ctr2.ctr_total_return) * Float64(1.2) | +| | Projection: ctr1.ctr_store_sk, ctr1.ctr_total_return, customer.c_customer_id | +| | Inner Join: ctr1.ctr_customer_sk = customer.c_customer_sk | +| | Projection: ctr1.ctr_customer_sk, ctr1.ctr_store_sk, ctr1.ctr_total_return | +| | Inner Join: ctr1.ctr_store_sk = store.s_store_sk | +| | SubqueryAlias: ctr1 | +| | SubqueryAlias: customer_total_return | +| | Projection: store_returns.sr_customer_sk AS ctr_customer_sk, store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[store_returns.sr_customer_sk, store_returns.sr_store_sk]], aggr=[[sum(store_returns.sr_return_amt_inc_tax)]] | +| | Projection: store_returns.sr_customer_sk, store_returns.sr_store_sk, store_returns.sr_return_amt_inc_tax | +| | Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt_inc_tax] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_state = LargeUtf8("TN")] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(CAST(avg(ctr2.ctr_total_return) AS Float64) * Float64(1.2) AS Decimal128(30, 15)), ctr2.ctr_store_sk | +| | Aggregate: groupBy=[[ctr2.ctr_store_sk]], aggr=[[avg(ctr2.ctr_total_return)]] | +| | SubqueryAlias: ctr2 | +| | SubqueryAlias: customer_total_return | +| | Projection: store_returns.sr_store_sk AS ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[store_returns.sr_customer_sk, store_returns.sr_store_sk]], aggr=[[sum(store_returns.sr_return_amt_inc_tax)]] | +| | Projection: store_returns.sr_customer_sk, store_returns.sr_store_sk, store_returns.sr_return_amt_inc_tax | +| | Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt_inc_tax] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1999)] | +| physical_plan | SortPreservingMergeExec: [c_customer_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[c_customer_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ctr_store_sk@0, ctr_store_sk@1)], filter=CAST(ctr_total_return@0 AS Decimal128(30, 15)) > avg(ctr2.ctr_total_return) * Float64(1.2)@1, projection=[c_customer_id@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ctr_customer_sk@0, c_customer_sk@0)], projection=[ctr_store_sk@1, ctr_total_return@2, c_customer_id@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ctr_store_sk@1, s_store_sk@0)], projection=[ctr_customer_sk@0, ctr_store_sk@1, ctr_total_return@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_store_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[sr_customer_sk@0 as ctr_customer_sk, sr_store_sk@1 as ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax)@2 as ctr_total_return] | +| | AggregateExec: mode=FinalPartitioned, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@0, sr_store_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@0, d_date_sk@0)], projection=[sr_customer_sk@1, sr_store_sk@2, sr_return_amt_inc_tax@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt_inc_tax] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_state@24 = TN, pruning_predicate=s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id] | +| | ProjectionExec: expr=[CAST(CAST(avg(ctr2.ctr_total_return)@1 AS Float64) * 1.2 AS Decimal128(30, 15)) as avg(ctr2.ctr_total_return) * Float64(1.2), ctr_store_sk@0 as ctr_store_sk] | +| | AggregateExec: mode=FinalPartitioned, gby=[ctr_store_sk@0 as ctr_store_sk], aggr=[avg(ctr2.ctr_total_return)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_store_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ctr_store_sk@0 as ctr_store_sk], aggr=[avg(ctr2.ctr_total_return)] | +| | ProjectionExec: expr=[sr_store_sk@1 as ctr_store_sk, sum(store_returns.sr_return_amt_inc_tax)@2 as ctr_total_return] | +| | AggregateExec: mode=FinalPartitioned, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@0, sr_store_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[sr_customer_sk@0 as sr_customer_sk, sr_store_sk@1 as sr_store_sk], aggr=[sum(store_returns.sr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@0, d_date_sk@0)], projection=[sr_customer_sk@1, sr_store_sk@2, sr_return_amt_inc_tax@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_customer_sk, sr_store_sk, sr_return_amt_inc_tax] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q20_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q20_explain.snap new file mode 100644 index 0000000000..21fd31de58 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q20_explain.snap @@ -0,0 +1,54 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q20" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(catalog_sales.cs_ext_sales_price) AS itemrevenue, sum(catalog_sales.cs_ext_sales_price) * Decimal128(Some(100),20,0) / sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS revenueratio | +| | WindowAggr: windowExpr=[[sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | Projection: catalog_sales.cs_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], full_filters=[item.i_category = LargeUtf8("Children") OR item.i_category = LargeUtf8("Sports") OR item.i_category = LargeUtf8("Music")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2002-04-01"), date_dim.d_date <= Date32("2002-05-01")] | +| physical_plan | SortPreservingMergeExec: [i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price, sum(catalog_sales.cs_ext_sales_price)@5 as itemrevenue, sum(catalog_sales.cs_ext_sales_price)@5 * Some(100),20,0 / sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@6 as revenueratio] | +| | WindowAggExec: wdw=[sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "sum(sum(catalog_sales.cs_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(27, 2), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_class@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_class@3], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price], aggr=[sum(catalog_sales.cs_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_category@2, i_class@3, i_current_price@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id, i_item_desc@2 as i_item_desc, i_category@5 as i_category, i_class@4 as i_class, i_current_price@3 as i_current_price], aggr=[sum(catalog_sales.cs_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_ext_sales_price@1, i_item_id@2, i_item_desc@3, i_current_price@4, i_class@5, i_category@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@1, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_ext_sales_price@2, i_item_id@4, i_item_desc@5, i_current_price@6, i_class@7, i_category@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], predicate=i_category@12 = Children OR i_category@12 = Sports OR i_category@12 = Music, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Children AND Children <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Sports AND Sports <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Music AND Music <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2002-04-01 AND d_date@2 <= 2002-05-01, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2002-04-01 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2002-05-01, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q21_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q21_explain.snap new file mode 100644 index 0000000000..89ab05a3fc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q21_explain.snap @@ -0,0 +1,70 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q21" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: x.w_warehouse_name ASC NULLS LAST, x.i_item_id ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: x | +| | Projection: warehouse.w_warehouse_name, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS inv_before, sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) AS inv_after | +| | Projection: warehouse.w_warehouse_name, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) | +| | Filter: __common_expr_5 >= Float64(0.6666666666666666) AND __common_expr_5 <= Float64(1.5) | +| | Projection: CAST(CASE WHEN sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) > Int64(0) THEN sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) / sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) ELSE Int64(NULL) END AS Float64) AS __common_expr_5, warehouse.w_warehouse_name, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END) | +| | Aggregate: groupBy=[[warehouse.w_warehouse_name, item.i_item_id]], aggr=[[sum(CASE WHEN __common_expr_2 < Date32("2000-05-19") THEN CAST(inventory.inv_quantity_on_hand AS Int64) ELSE Int64(0) END) AS sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN __common_expr_2 >= Date32("2000-05-19") THEN CAST(inventory.inv_quantity_on_hand AS Int64) ELSE Int64(0) END) AS sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)]] | +| | Projection: CAST(date_dim.d_date AS Date32) AS __common_expr_2, inventory.inv_quantity_on_hand, warehouse.w_warehouse_name, item.i_item_id | +| | Inner Join: inventory.inv_date_sk = date_dim.d_date_sk | +| | Projection: inventory.inv_date_sk, inventory.inv_quantity_on_hand, warehouse.w_warehouse_name, item.i_item_id | +| | Inner Join: inventory.inv_item_sk = item.i_item_sk | +| | Projection: inventory.inv_date_sk, inventory.inv_item_sk, inventory.inv_quantity_on_hand, warehouse.w_warehouse_name | +| | Inner Join: inventory.inv_warehouse_sk = warehouse.w_warehouse_sk | +| | BytesProcessedNode | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] | +| | BytesProcessedNode | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id], full_filters=[item.i_current_price >= Decimal128(Some(99),7,2), item.i_current_price <= Decimal128(Some(149),7,2)] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_date >= Date32("2000-04-19"), date_dim.d_date <= Date32("2000-06-18")] | +| physical_plan | SortPreservingMergeExec: [w_warehouse_name@0 ASC NULLS LAST, i_item_id@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[w_warehouse_name@0 ASC NULLS LAST, i_item_id@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, i_item_id@1 as i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 as inv_before, sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3 as inv_after] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: __common_expr_5@0 >= 0.6666666666666666 AND __common_expr_5@0 <= 1.5, projection=[w_warehouse_name@1, i_item_id@2, sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3, sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@4] | +| | ProjectionExec: expr=[CAST(CASE WHEN sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 > 0 THEN sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3 / sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 END AS Float64) as __common_expr_5, w_warehouse_name@0 as w_warehouse_name, i_item_id@1 as i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@2 as sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)@3 as sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)] | +| | AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, i_item_id@1 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_name@0, i_item_id@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[w_warehouse_name@2 as w_warehouse_name, i_item_id@3 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2000-05-19") THEN inventory.inv_quantity_on_hand ELSE Int64(0) END)] | +| | ProjectionExec: expr=[d_date@3 as __common_expr_2, inv_quantity_on_hand@0 as inv_quantity_on_hand, w_warehouse_name@1 as w_warehouse_name, i_item_id@2 as i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_date_sk@0, d_date_sk@0)], projection=[inv_quantity_on_hand@1, w_warehouse_name@2, i_item_id@3, d_date@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_item_sk@1, i_item_sk@0)], projection=[inv_date_sk@0, inv_quantity_on_hand@2, w_warehouse_name@3, i_item_id@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_warehouse_sk@2, w_warehouse_sk@0)], projection=[inv_date_sk@0, inv_item_sk@1, inv_quantity_on_hand@3, w_warehouse_name@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_warehouse_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/inventory/inventory.parquet:0..2678460], [tpcds_sf1/inventory/inventory.parquet:2678460..5356920], [tpcds_sf1/inventory/inventory.parquet:5356920..8035380], [tpcds_sf1/inventory/inventory.parquet:8035380..10713840], [tpcds_sf1/inventory/inventory.parquet:10713840..13392300], ...]}, projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/warehouse/warehouse.parquet]]}, projection=[w_warehouse_sk, w_warehouse_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id], predicate=i_current_price@5 >= Some(99),7,2 AND i_current_price@5 <= Some(149),7,2, pruning_predicate=i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_max@0 >= Some(99),7,2 AND i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_min@3 <= Some(149),7,2, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_date@2 >= 2000-04-19 AND d_date@2 <= 2000-06-18, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2000-04-19 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2000-06-18, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q22_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q22_explain.snap new file mode 100644 index 0000000000..866b9ad703 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q22_explain.snap @@ -0,0 +1,49 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q22" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: qoh ASC NULLS LAST, item.i_product_name ASC NULLS LAST, item.i_brand ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_category ASC NULLS LAST, fetch=100 | +| | Projection: item.i_product_name, item.i_brand, item.i_class, item.i_category, avg(inventory.inv_quantity_on_hand) AS qoh | +| | Aggregate: groupBy=[[ROLLUP (item.i_product_name, item.i_brand, item.i_class, item.i_category)]], aggr=[[avg(CAST(inventory.inv_quantity_on_hand AS Float64))]] | +| | Projection: inventory.inv_quantity_on_hand, item.i_brand, item.i_class, item.i_category, item.i_product_name | +| | Inner Join: inventory.inv_item_sk = item.i_item_sk | +| | Projection: inventory.inv_item_sk, inventory.inv_quantity_on_hand | +| | Inner Join: inventory.inv_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1201), date_dim.d_month_seq <= Int32(1212)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_class, i_category, i_product_name] | +| physical_plan | SortPreservingMergeExec: [qoh@4 ASC NULLS LAST, i_product_name@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, i_class@2 ASC NULLS LAST, i_category@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[qoh@4 ASC NULLS LAST, i_product_name@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, i_class@2 ASC NULLS LAST, i_category@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_product_name@0 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, i_category@3 as i_category, avg(inventory.inv_quantity_on_hand)@5 as qoh] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, i_category@3 as i_category, __grouping_id@4 as __grouping_id], aggr=[avg(inventory.inv_quantity_on_hand)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_product_name@0, i_brand@1, i_class@2, i_category@3, __grouping_id@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[(NULL as i_product_name, NULL as i_brand, NULL as i_class, NULL as i_category), (i_product_name@4 as i_product_name, NULL as i_brand, NULL as i_class, NULL as i_category), (i_product_name@4 as i_product_name, i_brand@1 as i_brand, NULL as i_class, NULL as i_category), (i_product_name@4 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, NULL as i_category), (i_product_name@4 as i_product_name, i_brand@1 as i_brand, i_class@2 as i_class, i_category@3 as i_category)], aggr=[avg(inventory.inv_quantity_on_hand)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_item_sk@0, i_item_sk@0)], projection=[inv_quantity_on_hand@1, i_brand@3, i_class@4, i_category@5, i_product_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_date_sk@0, d_date_sk@0)], projection=[inv_item_sk@1, inv_quantity_on_hand@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/inventory/inventory.parquet:0..2678460], [tpcds_sf1/inventory/inventory.parquet:2678460..5356920], [tpcds_sf1/inventory/inventory.parquet:5356920..8035380], [tpcds_sf1/inventory/inventory.parquet:8035380..10713840], [tpcds_sf1/inventory/inventory.parquet:10713840..13392300], ...]}, projection=[inv_date_sk, inv_item_sk, inv_quantity_on_hand] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1201 AND d_month_seq@3 <= 1212, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1201 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1212, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_class, i_category, i_product_name] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q25_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q25_explain.snap new file mode 100644 index 0000000000..0c5e309173 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q25_explain.snap @@ -0,0 +1,115 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q25" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, store.s_store_id ASC NULLS LAST, store.s_store_name ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name, min(store_sales.ss_net_profit) AS store_sales_profit, min(store_returns.sr_net_loss) AS store_returns_loss, min(catalog_sales.cs_net_profit) AS catalog_sales_profit | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name]], aggr=[[min(store_sales.ss_net_profit), min(store_returns.sr_net_loss), min(catalog_sales.cs_net_profit)]] | +| | Projection: store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_net_profit, store.s_store_id, store.s_store_name, item.i_item_id, item.i_item_desc | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_net_profit, store.s_store_id, store.s_store_name | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_net_profit | +| | Inner Join: catalog_sales.cs_sold_date_sk = d3.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_net_loss, catalog_sales.cs_sold_date_sk, catalog_sales.cs_net_profit | +| | Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_returned_date_sk, store_returns.sr_net_loss, catalog_sales.cs_sold_date_sk, catalog_sales.cs_net_profit | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_returned_date_sk, store_returns.sr_net_loss, catalog_sales.cs_sold_date_sk, catalog_sales.cs_net_profit | +| | Inner Join: store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk, store_returns.sr_item_sk = catalog_sales.cs_item_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_net_profit, store_returns.sr_returned_date_sk, store_returns.sr_item_sk, store_returns.sr_customer_sk, store_returns.sr_net_loss | +| | Inner Join: store_sales.ss_customer_sk = store_returns.sr_customer_sk, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_net_loss] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_net_profit] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(4), date_dim.d_year = Int32(2002)] | +| | SubqueryAlias: d2 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy >= Int32(4), date_dim.d_moy <= Int32(10), date_dim.d_year = Int32(2002)] | +| | SubqueryAlias: d3 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy >= Int32(4), date_dim.d_moy <= Int32(10), date_dim.d_year = Int32(2002)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id, s_store_name] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name, min(store_sales.ss_net_profit)@4 as store_sales_profit, min(store_returns.sr_net_loss)@5 as store_returns_loss, min(catalog_sales.cs_net_profit)@6 as catalog_sales_profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name], aggr=[min(store_sales.ss_net_profit), min(store_returns.sr_net_loss), min(catalog_sales.cs_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, s_store_id@2, s_store_name@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@5 as i_item_id, i_item_desc@6 as i_item_desc, s_store_id@3 as s_store_id, s_store_name@4 as s_store_name], aggr=[min(store_sales.ss_net_profit), min(store_returns.sr_net_loss), min(catalog_sales.cs_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_net_profit@1, sr_net_loss@2, cs_net_profit@3, s_store_id@4, s_store_name@5, i_item_id@7, i_item_desc@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_item_sk@0, ss_net_profit@2, sr_net_loss@3, cs_net_profit@4, s_store_id@6, s_store_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@4, d_date_sk@0)], projection=[ss_item_sk@0, ss_store_sk@1, ss_net_profit@2, sr_net_loss@3, cs_net_profit@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@3, d_date_sk@0)], projection=[ss_item_sk@0, ss_store_sk@1, ss_net_profit@2, sr_net_loss@4, cs_sold_date_sk@5, cs_net_profit@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_net_profit@3, sr_returned_date_sk@4, sr_net_loss@5, cs_sold_date_sk@6, cs_net_profit@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_customer_sk@6, cs_bill_customer_sk@1), (sr_item_sk@5, cs_item_sk@2)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@2, ss_net_profit@3, sr_returned_date_sk@4, sr_net_loss@7, cs_sold_date_sk@8, cs_net_profit@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@6, sr_item_sk@5], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@2, sr_customer_sk@2), (ss_item_sk@1, sr_item_sk@1), (ss_ticket_number@4, sr_ticket_number@3)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@3, ss_net_profit@5, sr_returned_date_sk@6, sr_item_sk@7, sr_customer_sk@8, sr_net_loss@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@2, ss_item_sk@1, ss_ticket_number@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@2, sr_item_sk@1, sr_ticket_number@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1, cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 4 AND d_year@6 = 2002, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 4 AND 4 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2002 AND 2002 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 >= 4 AND d_moy@8 <= 10 AND d_year@6 = 2002, pruning_predicate=d_moy_null_count@1 != d_moy_row_count@2 AND d_moy_max@0 >= 4 AND d_moy_null_count@1 != d_moy_row_count@2 AND d_moy_min@3 <= 10 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2002 AND 2002 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 >= 4 AND d_moy@8 <= 10 AND d_year@6 = 2002, pruning_predicate=d_moy_null_count@1 != d_moy_row_count@2 AND d_moy_max@0 >= 4 AND d_moy_null_count@1 != d_moy_row_count@2 AND d_moy_min@3 <= 10 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2002 AND 2002 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id, s_store_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q26_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q26_explain.snap new file mode 100644 index 0000000000..01476fa9d1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q26_explain.snap @@ -0,0 +1,75 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q26" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, avg(catalog_sales.cs_quantity) AS agg1, avg(catalog_sales.cs_list_price) AS agg2, avg(catalog_sales.cs_coupon_amt) AS agg3, avg(catalog_sales.cs_sales_price) AS agg4 | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[avg(CAST(catalog_sales.cs_quantity AS Float64)), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price)]] | +| | Projection: catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, item.i_item_id | +| | Inner Join: catalog_sales.cs_promo_sk = promotion.p_promo_sk | +| | Projection: catalog_sales.cs_promo_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt, item.i_item_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_quantity, catalog_sales.cs_list_price, catalog_sales.cs_sales_price, catalog_sales.cs_coupon_amt | +| | Inner Join: catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_cdemo_sk, cs_item_sk, cs_promo_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk], full_filters=[customer_demographics.cd_gender = LargeUtf8("F"), customer_demographics.cd_marital_status = LargeUtf8("M"), customer_demographics.cd_education_status = LargeUtf8("4 yr Degree")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_email = LargeUtf8("N") OR promotion.p_channel_event = LargeUtf8("N")] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, avg(catalog_sales.cs_quantity)@1 as agg1, avg(catalog_sales.cs_list_price)@2 as agg2, avg(catalog_sales.cs_coupon_amt)@3 as agg3, avg(catalog_sales.cs_sales_price)@4 as agg4] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@4 as i_item_id], aggr=[avg(catalog_sales.cs_quantity), avg(catalog_sales.cs_list_price), avg(catalog_sales.cs_coupon_amt), avg(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_promo_sk@0, p_promo_sk@0)], projection=[cs_quantity@1, cs_list_price@2, cs_sales_price@3, cs_coupon_amt@4, i_item_id@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_promo_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_promo_sk@1, cs_quantity@2, cs_list_price@3, cs_sales_price@4, cs_coupon_amt@5, i_item_id@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_item_sk@1, cs_promo_sk@2, cs_quantity@3, cs_list_price@4, cs_sales_price@5, cs_coupon_amt@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_cdemo_sk@1, cd_demo_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@2, cs_promo_sk@3, cs_quantity@4, cs_list_price@5, cs_sales_price@6, cs_coupon_amt@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_cdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_cdemo_sk, cs_item_sk, cs_promo_sk, cs_quantity, cs_list_price, cs_sales_price, cs_coupon_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk], predicate=cd_gender@1 = F AND cd_marital_status@2 = M AND cd_education_status@3 = 4 yr Degree, pruning_predicate=cd_gender_null_count@2 != cd_gender_row_count@3 AND cd_gender_min@0 <= F AND F <= cd_gender_max@1 AND cd_marital_status_null_count@6 != cd_marital_status_row_count@7 AND cd_marital_status_min@4 <= M AND M <= cd_marital_status_max@5 AND cd_education_status_null_count@10 != cd_education_status_row_count@11 AND cd_education_status_min@8 <= 4 yr Degree AND 4 yr Degree <= cd_education_status_max@9, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk], predicate=p_channel_email@9 = N OR p_channel_event@14 = N, pruning_predicate=p_channel_email_null_count@2 != p_channel_email_row_count@3 AND p_channel_email_min@0 <= N AND N <= p_channel_email_max@1 OR p_channel_event_null_count@6 != p_channel_event_row_count@7 AND p_channel_event_min@4 <= N AND N <= p_channel_event_max@5, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q27_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q27_explain.snap new file mode 100644 index 0000000000..01121c98a8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q27_explain.snap @@ -0,0 +1,75 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q27" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, store.s_state ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, store.s_state, CAST(__grouping_id & UInt8(1) AS Int32) AS g_state, avg(store_sales.ss_quantity) AS agg1, avg(store_sales.ss_list_price) AS agg2, avg(store_sales.ss_coupon_amt) AS agg3, avg(store_sales.ss_sales_price) AS agg4 | +| | Aggregate: groupBy=[[ROLLUP (item.i_item_id, store.s_state)]], aggr=[[avg(CAST(store_sales.ss_quantity AS Float64)), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)]] | +| | Projection: store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt, store.s_state, item.i_item_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt, store.s_state | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk], full_filters=[customer_demographics.cd_gender = LargeUtf8("M"), customer_demographics.cd_marital_status = LargeUtf8("U"), customer_demographics.cd_education_status = LargeUtf8("Secondary")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_state], full_filters=[store.s_state IN ([LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN")])] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST, s_state@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST, s_state@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, s_state@1 as s_state, CAST(__grouping_id@2 & 1 AS Int32) as g_state, avg(store_sales.ss_quantity)@3 as agg1, avg(store_sales.ss_list_price)@4 as agg2, avg(store_sales.ss_coupon_amt)@5 as agg3, avg(store_sales.ss_sales_price)@6 as agg4] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, s_state@1 as s_state, __grouping_id@2 as __grouping_id], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, s_state@1, __grouping_id@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[(NULL as i_item_id, NULL as s_state), (i_item_id@5 as i_item_id, NULL as s_state), (i_item_id@5 as i_item_id, s_state@4 as s_state)], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_quantity@1, ss_list_price@2, ss_sales_price@3, ss_coupon_amt@4, s_state@5, i_item_id@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_item_sk@0, ss_quantity@2, ss_list_price@3, ss_sales_price@4, ss_coupon_amt@5, s_state@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, ss_list_price@4, ss_sales_price@5, ss_coupon_amt@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_cdemo_sk@2, cd_demo_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@3, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_cdemo_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk], predicate=cd_gender@1 = M AND cd_marital_status@2 = U AND cd_education_status@3 = Secondary, pruning_predicate=cd_gender_null_count@2 != cd_gender_row_count@3 AND cd_gender_min@0 <= M AND M <= cd_gender_max@1 AND cd_marital_status_null_count@6 != cd_marital_status_row_count@7 AND cd_marital_status_min@4 <= U AND U <= cd_marital_status_max@5 AND cd_education_status_null_count@10 != cd_education_status_row_count@11 AND cd_education_status_min@8 <= Secondary AND Secondary <= cd_education_status_max@9, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_state], predicate=Use s_state@24 IN (SET) ([Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }]), pruning_predicate=s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q28_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q28_explain.snap new file mode 100644 index 0000000000..e93d674431 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q28_explain.snap @@ -0,0 +1,109 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q28" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Limit: skip=0, fetch=100 | +| | Cross Join: | +| | Limit: skip=0, fetch=100 | +| | Cross Join: | +| | Limit: skip=0, fetch=100 | +| | Cross Join: | +| | Limit: skip=0, fetch=100 | +| | Cross Join: | +| | Limit: skip=0, fetch=100 | +| | Cross Join: | +| | SubqueryAlias: B1 | +| | Projection: avg(store_sales.ss_list_price) AS B1_LP, count(store_sales.ss_list_price) AS B1_CNT, count(DISTINCT store_sales.ss_list_price) AS B1_CNTD | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_list_price], full_filters=[store_sales.ss_quantity >= Int32(0), store_sales.ss_quantity <= Int32(5), store_sales.ss_list_price >= Decimal128(Some(2800),7,2) AND store_sales.ss_list_price <= Decimal128(Some(3800),7,2) OR store_sales.ss_coupon_amt >= Decimal128(Some(1257300),7,2) AND store_sales.ss_coupon_amt <= Decimal128(Some(1357300),7,2) OR store_sales.ss_wholesale_cost >= Decimal128(Some(3300),7,2) AND store_sales.ss_wholesale_cost <= Decimal128(Some(5300),7,2)] | +| | SubqueryAlias: B2 | +| | Projection: avg(store_sales.ss_list_price) AS B2_LP, count(store_sales.ss_list_price) AS B2_CNT, count(DISTINCT store_sales.ss_list_price) AS B2_CNTD | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_list_price], full_filters=[store_sales.ss_quantity >= Int32(6), store_sales.ss_quantity <= Int32(10), store_sales.ss_list_price >= Decimal128(Some(14300),7,2) AND store_sales.ss_list_price <= Decimal128(Some(15300),7,2) OR store_sales.ss_coupon_amt >= Decimal128(Some(556200),7,2) AND store_sales.ss_coupon_amt <= Decimal128(Some(656200),7,2) OR store_sales.ss_wholesale_cost >= Decimal128(Some(4500),7,2) AND store_sales.ss_wholesale_cost <= Decimal128(Some(6500),7,2)] | +| | SubqueryAlias: B3 | +| | Projection: avg(store_sales.ss_list_price) AS B3_LP, count(store_sales.ss_list_price) AS B3_CNT, count(DISTINCT store_sales.ss_list_price) AS B3_CNTD | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_list_price], full_filters=[store_sales.ss_quantity >= Int32(11), store_sales.ss_quantity <= Int32(15), store_sales.ss_list_price >= Decimal128(Some(15900),7,2) AND store_sales.ss_list_price <= Decimal128(Some(16900),7,2) OR store_sales.ss_coupon_amt >= Decimal128(Some(280700),7,2) AND store_sales.ss_coupon_amt <= Decimal128(Some(380700),7,2) OR store_sales.ss_wholesale_cost >= Decimal128(Some(2400),7,2) AND store_sales.ss_wholesale_cost <= Decimal128(Some(4400),7,2)] | +| | SubqueryAlias: B4 | +| | Projection: avg(store_sales.ss_list_price) AS B4_LP, count(store_sales.ss_list_price) AS B4_CNT, count(DISTINCT store_sales.ss_list_price) AS B4_CNTD | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_list_price], full_filters=[store_sales.ss_quantity >= Int32(16), store_sales.ss_quantity <= Int32(20), store_sales.ss_list_price >= Decimal128(Some(2400),7,2) AND store_sales.ss_list_price <= Decimal128(Some(3400),7,2) OR store_sales.ss_coupon_amt >= Decimal128(Some(370600),7,2) AND store_sales.ss_coupon_amt <= Decimal128(Some(470600),7,2) OR store_sales.ss_wholesale_cost >= Decimal128(Some(4600),7,2) AND store_sales.ss_wholesale_cost <= Decimal128(Some(6600),7,2)] | +| | SubqueryAlias: B5 | +| | Projection: avg(store_sales.ss_list_price) AS B5_LP, count(store_sales.ss_list_price) AS B5_CNT, count(DISTINCT store_sales.ss_list_price) AS B5_CNTD | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_list_price], full_filters=[store_sales.ss_quantity >= Int32(21), store_sales.ss_quantity <= Int32(25), store_sales.ss_list_price >= Decimal128(Some(7600),7,2) AND store_sales.ss_list_price <= Decimal128(Some(8600),7,2) OR store_sales.ss_coupon_amt >= Decimal128(Some(209600),7,2) AND store_sales.ss_coupon_amt <= Decimal128(Some(309600),7,2) OR store_sales.ss_wholesale_cost >= Decimal128(Some(5000),7,2) AND store_sales.ss_wholesale_cost <= Decimal128(Some(7000),7,2)] | +| | SubqueryAlias: B6 | +| | Projection: avg(store_sales.ss_list_price) AS B6_LP, count(store_sales.ss_list_price) AS B6_CNT, count(DISTINCT store_sales.ss_list_price) AS B6_CNTD | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_list_price], full_filters=[store_sales.ss_quantity >= Int32(26), store_sales.ss_quantity <= Int32(30), store_sales.ss_list_price >= Decimal128(Some(16900),7,2) AND store_sales.ss_list_price <= Decimal128(Some(17900),7,2) OR store_sales.ss_coupon_amt >= Decimal128(Some(1067200),7,2) AND store_sales.ss_coupon_amt <= Decimal128(Some(1167200),7,2) OR store_sales.ss_wholesale_cost >= Decimal128(Some(5800),7,2) AND store_sales.ss_wholesale_cost <= Decimal128(Some(7800),7,2)] | +| physical_plan | ProjectionExec: expr=[B1_LP@3 as B1_LP, B1_CNT@4 as B1_CNT, B1_CNTD@5 as B1_CNTD, B2_LP@6 as B2_LP, B2_CNT@7 as B2_CNT, B2_CNTD@8 as B2_CNTD, B3_LP@9 as B3_LP, B3_CNT@10 as B3_CNT, B3_CNTD@11 as B3_CNTD, B4_LP@12 as B4_LP, B4_CNT@13 as B4_CNT, B4_CNTD@14 as B4_CNTD, B5_LP@15 as B5_LP, B5_CNT@16 as B5_CNT, B5_CNTD@17 as B5_CNTD, B6_LP@0 as B6_LP, B6_CNT@1 as B6_CNT, B6_CNTD@2 as B6_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | CrossJoinExec | +| | ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as B6_LP, count(store_sales.ss_list_price)@1 as B6_CNT, count(DISTINCT store_sales.ss_list_price)@2 as B6_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_list_price], predicate=ss_quantity@10 >= 26 AND ss_quantity@10 <= 30 AND (ss_list_price@12 >= Some(16900),7,2 AND ss_list_price@12 <= Some(17900),7,2 OR ss_coupon_amt@19 >= Some(1067200),7,2 AND ss_coupon_amt@19 <= Some(1167200),7,2 OR ss_wholesale_cost@11 >= Some(5800),7,2 AND ss_wholesale_cost@11 <= Some(7800),7,2), pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 26 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 30 AND (ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_max@4 >= Some(16900),7,2 AND ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_min@7 <= Some(17900),7,2 OR ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_max@8 >= Some(1067200),7,2 AND ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_min@11 <= Some(1167200),7,2 OR ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_max@12 >= Some(5800),7,2 AND ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_min@15 <= Some(7800),7,2), required_guarantees=[N] | +| | ProjectionExec: expr=[B1_LP@3 as B1_LP, B1_CNT@4 as B1_CNT, B1_CNTD@5 as B1_CNTD, B2_LP@6 as B2_LP, B2_CNT@7 as B2_CNT, B2_CNTD@8 as B2_CNTD, B3_LP@9 as B3_LP, B3_CNT@10 as B3_CNT, B3_CNTD@11 as B3_CNTD, B4_LP@12 as B4_LP, B4_CNT@13 as B4_CNT, B4_CNTD@14 as B4_CNTD, B5_LP@0 as B5_LP, B5_CNT@1 as B5_CNT, B5_CNTD@2 as B5_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | CrossJoinExec | +| | ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as B5_LP, count(store_sales.ss_list_price)@1 as B5_CNT, count(DISTINCT store_sales.ss_list_price)@2 as B5_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_list_price], predicate=ss_quantity@10 >= 21 AND ss_quantity@10 <= 25 AND (ss_list_price@12 >= Some(7600),7,2 AND ss_list_price@12 <= Some(8600),7,2 OR ss_coupon_amt@19 >= Some(209600),7,2 AND ss_coupon_amt@19 <= Some(309600),7,2 OR ss_wholesale_cost@11 >= Some(5000),7,2 AND ss_wholesale_cost@11 <= Some(7000),7,2), pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 21 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 25 AND (ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_max@4 >= Some(7600),7,2 AND ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_min@7 <= Some(8600),7,2 OR ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_max@8 >= Some(209600),7,2 AND ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_min@11 <= Some(309600),7,2 OR ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_max@12 >= Some(5000),7,2 AND ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_min@15 <= Some(7000),7,2), required_guarantees=[N] | +| | ProjectionExec: expr=[B1_LP@3 as B1_LP, B1_CNT@4 as B1_CNT, B1_CNTD@5 as B1_CNTD, B2_LP@6 as B2_LP, B2_CNT@7 as B2_CNT, B2_CNTD@8 as B2_CNTD, B3_LP@9 as B3_LP, B3_CNT@10 as B3_CNT, B3_CNTD@11 as B3_CNTD, B4_LP@0 as B4_LP, B4_CNT@1 as B4_CNT, B4_CNTD@2 as B4_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | CrossJoinExec | +| | ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as B4_LP, count(store_sales.ss_list_price)@1 as B4_CNT, count(DISTINCT store_sales.ss_list_price)@2 as B4_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_list_price], predicate=ss_quantity@10 >= 16 AND ss_quantity@10 <= 20 AND (ss_list_price@12 >= Some(2400),7,2 AND ss_list_price@12 <= Some(3400),7,2 OR ss_coupon_amt@19 >= Some(370600),7,2 AND ss_coupon_amt@19 <= Some(470600),7,2 OR ss_wholesale_cost@11 >= Some(4600),7,2 AND ss_wholesale_cost@11 <= Some(6600),7,2), pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 16 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 20 AND (ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_max@4 >= Some(2400),7,2 AND ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_min@7 <= Some(3400),7,2 OR ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_max@8 >= Some(370600),7,2 AND ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_min@11 <= Some(470600),7,2 OR ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_max@12 >= Some(4600),7,2 AND ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_min@15 <= Some(6600),7,2), required_guarantees=[N] | +| | ProjectionExec: expr=[B1_LP@3 as B1_LP, B1_CNT@4 as B1_CNT, B1_CNTD@5 as B1_CNTD, B2_LP@6 as B2_LP, B2_CNT@7 as B2_CNT, B2_CNTD@8 as B2_CNTD, B3_LP@0 as B3_LP, B3_CNT@1 as B3_CNT, B3_CNTD@2 as B3_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | CrossJoinExec | +| | ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as B3_LP, count(store_sales.ss_list_price)@1 as B3_CNT, count(DISTINCT store_sales.ss_list_price)@2 as B3_CNTD] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_list_price], predicate=ss_quantity@10 >= 11 AND ss_quantity@10 <= 15 AND (ss_list_price@12 >= Some(15900),7,2 AND ss_list_price@12 <= Some(16900),7,2 OR ss_coupon_amt@19 >= Some(280700),7,2 AND ss_coupon_amt@19 <= Some(380700),7,2 OR ss_wholesale_cost@11 >= Some(2400),7,2 AND ss_wholesale_cost@11 <= Some(4400),7,2), pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 11 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 15 AND (ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_max@4 >= Some(15900),7,2 AND ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_min@7 <= Some(16900),7,2 OR ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_max@8 >= Some(280700),7,2 AND ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_min@11 <= Some(380700),7,2 OR ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_max@12 >= Some(2400),7,2 AND ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_min@15 <= Some(4400),7,2), required_guarantees=[N] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | CrossJoinExec | +| | ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as B1_LP, count(store_sales.ss_list_price)@1 as B1_CNT, count(DISTINCT store_sales.ss_list_price)@2 as B1_CNTD] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_list_price], predicate=ss_quantity@10 >= 0 AND ss_quantity@10 <= 5 AND (ss_list_price@12 >= Some(2800),7,2 AND ss_list_price@12 <= Some(3800),7,2 OR ss_coupon_amt@19 >= Some(1257300),7,2 AND ss_coupon_amt@19 <= Some(1357300),7,2 OR ss_wholesale_cost@11 >= Some(3300),7,2 AND ss_wholesale_cost@11 <= Some(5300),7,2), pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 0 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 5 AND (ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_max@4 >= Some(2800),7,2 AND ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_min@7 <= Some(3800),7,2 OR ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_max@8 >= Some(1257300),7,2 AND ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_min@11 <= Some(1357300),7,2 OR ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_max@12 >= Some(3300),7,2 AND ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_min@15 <= Some(5300),7,2), required_guarantees=[N] | +| | ProjectionExec: expr=[avg(store_sales.ss_list_price)@0 as B2_LP, count(store_sales.ss_list_price)@1 as B2_CNT, count(DISTINCT store_sales.ss_list_price)@2 as B2_CNTD] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_list_price), count(store_sales.ss_list_price), count(DISTINCT store_sales.ss_list_price)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_list_price], predicate=ss_quantity@10 >= 6 AND ss_quantity@10 <= 10 AND (ss_list_price@12 >= Some(14300),7,2 AND ss_list_price@12 <= Some(15300),7,2 OR ss_coupon_amt@19 >= Some(556200),7,2 AND ss_coupon_amt@19 <= Some(656200),7,2 OR ss_wholesale_cost@11 >= Some(4500),7,2 AND ss_wholesale_cost@11 <= Some(6500),7,2), pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 6 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 10 AND (ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_max@4 >= Some(14300),7,2 AND ss_list_price_null_count@5 != ss_list_price_row_count@6 AND ss_list_price_min@7 <= Some(15300),7,2 OR ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_max@8 >= Some(556200),7,2 AND ss_coupon_amt_null_count@9 != ss_coupon_amt_row_count@10 AND ss_coupon_amt_min@11 <= Some(656200),7,2 OR ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_max@12 >= Some(4500),7,2 AND ss_wholesale_cost_null_count@13 != ss_wholesale_cost_row_count@14 AND ss_wholesale_cost_min@15 <= Some(6500),7,2), required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q29_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q29_explain.snap new file mode 100644 index 0000000000..f1d8cdc97f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q29_explain.snap @@ -0,0 +1,115 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q29" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, store.s_store_id ASC NULLS LAST, store.s_store_name ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name, stddev(store_sales.ss_quantity) AS store_sales_quantity, stddev(store_returns.sr_return_quantity) AS store_returns_quantity, stddev(catalog_sales.cs_quantity) AS catalog_sales_quantity | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, store.s_store_id, store.s_store_name]], aggr=[[stddev(store_sales.ss_quantity), stddev(store_returns.sr_return_quantity), stddev(catalog_sales.cs_quantity)]] | +| | Projection: store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_store_id, store.s_store_name, item.i_item_id, item.i_item_desc | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity, store.s_store_id, store.s_store_name | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_quantity | +| | Inner Join: catalog_sales.cs_sold_date_sk = d3.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity | +| | Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, catalog_sales.cs_sold_date_sk, catalog_sales.cs_quantity | +| | Inner Join: store_returns.sr_customer_sk = catalog_sales.cs_bill_customer_sk, store_returns.sr_item_sk = catalog_sales.cs_item_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_returns.sr_returned_date_sk, store_returns.sr_item_sk, store_returns.sr_customer_sk, store_returns.sr_return_quantity | +| | Inner Join: store_sales.ss_customer_sk = store_returns.sr_customer_sk, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(4), date_dim.d_year = Int32(1999)] | +| | SubqueryAlias: d2 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy >= Int32(4), date_dim.d_moy <= Int32(7), date_dim.d_year = Int32(1999)] | +| | SubqueryAlias: d3 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1999) OR date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id, s_store_name] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, s_store_id@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name, stddev(store_sales.ss_quantity)@4 as store_sales_quantity, stddev(store_returns.sr_return_quantity)@5 as store_returns_quantity, stddev(catalog_sales.cs_quantity)@6 as catalog_sales_quantity] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, s_store_id@2 as s_store_id, s_store_name@3 as s_store_name], aggr=[stddev(store_sales.ss_quantity), stddev(store_returns.sr_return_quantity), stddev(catalog_sales.cs_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, s_store_id@2, s_store_name@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@5 as i_item_id, i_item_desc@6 as i_item_desc, s_store_id@3 as s_store_id, s_store_name@4 as s_store_name], aggr=[stddev(store_sales.ss_quantity), stddev(store_returns.sr_return_quantity), stddev(catalog_sales.cs_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_quantity@1, sr_return_quantity@2, cs_quantity@3, s_store_id@4, s_store_name@5, i_item_id@7, i_item_desc@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_item_sk@0, ss_quantity@2, sr_return_quantity@3, cs_quantity@4, s_store_id@6, s_store_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@4, d_date_sk@0)], projection=[ss_item_sk@0, ss_store_sk@1, ss_quantity@2, sr_return_quantity@3, cs_quantity@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@3, d_date_sk@0)], projection=[ss_item_sk@0, ss_store_sk@1, ss_quantity@2, sr_return_quantity@4, cs_sold_date_sk@5, cs_quantity@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_returned_date_sk@4, sr_return_quantity@5, cs_sold_date_sk@6, cs_quantity@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_customer_sk@6, cs_bill_customer_sk@1), (sr_item_sk@5, cs_item_sk@2)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@2, ss_quantity@3, sr_returned_date_sk@4, sr_return_quantity@7, cs_sold_date_sk@8, cs_quantity@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@6, sr_item_sk@5], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@2, sr_customer_sk@2), (ss_item_sk@1, sr_item_sk@1), (ss_ticket_number@4, sr_ticket_number@3)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@3, ss_quantity@5, sr_returned_date_sk@6, sr_item_sk@7, sr_customer_sk@8, sr_return_quantity@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@2, ss_item_sk@1, ss_ticket_number@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number, ss_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_customer_sk@2, sr_item_sk@1, sr_ticket_number@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number, sr_return_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1, cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 4 AND d_year@6 = 1999, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 4 AND 4 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 >= 4 AND d_moy@8 <= 7 AND d_year@6 = 1999, pruning_predicate=d_moy_null_count@1 != d_moy_row_count@2 AND d_moy_max@0 >= 4 AND d_moy_null_count@1 != d_moy_row_count@2 AND d_moy_min@3 <= 7 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id, s_store_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q2_explain.snap new file mode 100644 index 0000000000..b002e42212 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q2_explain.snap @@ -0,0 +1,119 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q2" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: y.d_week_seq1 ASC NULLS LAST | +| | Projection: y.d_week_seq1, round(CAST(y.sun_sales1 / z.sun_sales2 AS Float64), Int64(2)), round(CAST(y.mon_sales1 / z.mon_sales2 AS Float64), Int64(2)), round(CAST(y.tue_sales1 / z.tue_sales2 AS Float64), Int64(2)), round(CAST(y.wed_sales1 / z.wed_sales2 AS Float64), Int64(2)), round(CAST(y.thu_sales1 / z.thu_sales2 AS Float64), Int64(2)), round(CAST(y.fri_sales1 / z.fri_sales2 AS Float64), Int64(2)), round(CAST(y.sat_sales1 / z.sat_sales2 AS Float64), Int64(2)) | +| | Inner Join: CAST(y.d_week_seq1 AS Int64) = CAST(z.d_week_seq2 AS Int64) - Int64(53) | +| | SubqueryAlias: y | +| | Projection: wswscs.d_week_seq AS d_week_seq1, wswscs.sun_sales AS sun_sales1, wswscs.mon_sales AS mon_sales1, wswscs.tue_sales AS tue_sales1, wswscs.wed_sales AS wed_sales1, wswscs.thu_sales AS thu_sales1, wswscs.fri_sales AS fri_sales1, wswscs.sat_sales AS sat_sales1 | +| | Inner Join: wswscs.d_week_seq = date_dim.d_week_seq | +| | SubqueryAlias: wswscs | +| | Projection: date_dim.d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq]], aggr=[[sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Sunday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Monday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Tuesday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Wednesday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Thursday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Friday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Saturday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)]] | +| | Projection: wscs.sales_price, date_dim.d_week_seq, date_dim.d_day_name | +| | Inner Join: wscs.sold_date_sk = date_dim.d_date_sk | +| | SubqueryAlias: wscs | +| | Union | +| | Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_ext_sales_price] | +| | Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_year = Int32(2000)] | +| | SubqueryAlias: z | +| | Projection: wswscs.d_week_seq AS d_week_seq2, wswscs.sun_sales AS sun_sales2, wswscs.mon_sales AS mon_sales2, wswscs.tue_sales AS tue_sales2, wswscs.wed_sales AS wed_sales2, wswscs.thu_sales AS thu_sales2, wswscs.fri_sales AS fri_sales2, wswscs.sat_sales AS sat_sales2 | +| | Inner Join: wswscs.d_week_seq = date_dim.d_week_seq | +| | SubqueryAlias: wswscs | +| | Projection: date_dim.d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq]], aggr=[[sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Sunday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Monday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Tuesday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Wednesday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Thursday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Friday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Saturday") THEN wscs.sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)]] | +| | Projection: wscs.sales_price, date_dim.d_week_seq, date_dim.d_day_name | +| | Inner Join: wscs.sold_date_sk = date_dim.d_date_sk | +| | SubqueryAlias: wscs | +| | Union | +| | Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_ext_sales_price AS sales_price | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_ext_sales_price] | +| | Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_ext_sales_price AS sales_price | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_year = Int32(2001)] | +| physical_plan | SortPreservingMergeExec: [d_week_seq1@0 ASC NULLS LAST] | +| | SortExec: expr=[d_week_seq1@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[d_week_seq1@0 as d_week_seq1, round(CAST(sun_sales1@1 / sun_sales2@8 AS Float64), 2) as round(y.sun_sales1 / z.sun_sales2,Int64(2)), round(CAST(mon_sales1@2 / mon_sales2@9 AS Float64), 2) as round(y.mon_sales1 / z.mon_sales2,Int64(2)), round(CAST(tue_sales1@3 / tue_sales2@10 AS Float64), 2) as round(y.tue_sales1 / z.tue_sales2,Int64(2)), round(CAST(wed_sales1@4 / wed_sales2@11 AS Float64), 2) as round(y.wed_sales1 / z.wed_sales2,Int64(2)), round(CAST(thu_sales1@5 / thu_sales2@12 AS Float64), 2) as round(y.thu_sales1 / z.thu_sales2,Int64(2)), round(CAST(fri_sales1@6 / fri_sales2@13 AS Float64), 2) as round(y.fri_sales1 / z.fri_sales2,Int64(2)), round(CAST(sat_sales1@7 / sat_sales2@14 AS Float64), 2) as round(y.sat_sales1 / z.sat_sales2,Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(CAST(y.d_week_seq1 AS Int64)@8, z.d_week_seq2 - Int64(53)@8)], projection=[d_week_seq1@0, sun_sales1@1, mon_sales1@2, tue_sales1@3, wed_sales1@4, thu_sales1@5, fri_sales1@6, sat_sales1@7, sun_sales2@10, mon_sales2@11, tue_sales2@12, wed_sales2@13, thu_sales2@14, fri_sales2@15, sat_sales2@16] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([CAST(y.d_week_seq1 AS Int64)@8], 24), input_partitions=24 | +| | ProjectionExec: expr=[d_week_seq@0 as d_week_seq1, sun_sales@1 as sun_sales1, mon_sales@2 as mon_sales1, tue_sales@3 as tue_sales1, wed_sales@4 as wed_sales1, thu_sales@5 as thu_sales1, fri_sales@6 as fri_sales1, sat_sales@7 as sat_sales1, CAST(d_week_seq@0 AS Int64) as CAST(y.d_week_seq1 AS Int64)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[d_week_seq@0, sun_sales@1, mon_sales@2, tue_sales@3, wed_sales@4, thu_sales@5, fri_sales@6, sat_sales@7] | +| | ProjectionExec: expr=[d_week_seq@0 as d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END)@1 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END)@2 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END)@3 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END)@4 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END)@5 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END)@6 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)@7 as sat_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_week_seq@1 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sold_date_sk@0, d_date_sk@0)], projection=[sales_price@1, d_week_seq@3, d_day_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sold_date_sk@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[ws_sold_date_sk@0 as sold_date_sk, ws_ext_sales_price@1 as sales_price] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_ext_sales_price] | +| | ProjectionExec: expr=[cs_sold_date_sk@0 as sold_date_sk, cs_ext_sales_price@1 as sales_price] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_week_seq, d_day_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([z.d_week_seq2 - Int64(53)@8], 24), input_partitions=24 | +| | ProjectionExec: expr=[d_week_seq@0 as d_week_seq2, sun_sales@1 as sun_sales2, mon_sales@2 as mon_sales2, tue_sales@3 as tue_sales2, wed_sales@4 as wed_sales2, thu_sales@5 as thu_sales2, fri_sales@6 as fri_sales2, sat_sales@7 as sat_sales2, CAST(d_week_seq@0 AS Int64) - 53 as z.d_week_seq2 - Int64(53)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[d_week_seq@0, sun_sales@1, mon_sales@2, tue_sales@3, wed_sales@4, thu_sales@5, fri_sales@6, sat_sales@7] | +| | ProjectionExec: expr=[d_week_seq@0 as d_week_seq, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END)@1 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END)@2 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END)@3 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END)@4 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END)@5 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END)@6 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)@7 as sat_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_week_seq@1 as d_week_seq], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN wscs.sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN wscs.sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sold_date_sk@0, d_date_sk@0)], projection=[sales_price@1, d_week_seq@3, d_day_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sold_date_sk@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[ws_sold_date_sk@0 as sold_date_sk, ws_ext_sales_price@1 as sales_price] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_ext_sales_price] | +| | ProjectionExec: expr=[cs_sold_date_sk@0 as sold_date_sk, cs_ext_sales_price@1 as sales_price] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_week_seq, d_day_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q30_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q30_explain.snap new file mode 100644 index 0000000000..dbe661d0b1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q30_explain.snap @@ -0,0 +1,133 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q30" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer.c_customer_id ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_last_name ASC NULLS LAST, customer.c_preferred_cust_flag ASC NULLS LAST, customer.c_birth_day ASC NULLS LAST, customer.c_birth_month ASC NULLS LAST, customer.c_birth_year ASC NULLS LAST, customer.c_birth_country ASC NULLS LAST, customer.c_login ASC NULLS LAST, customer.c_email_address ASC NULLS LAST, customer.c_last_review_date_sk ASC NULLS LAST, ctr1.ctr_total_return ASC NULLS LAST, fetch=100 | +| | Projection: customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk, ctr1.ctr_total_return | +| | Inner Join: ctr1.ctr_state = __scalar_sq_1.ctr_state Filter: CAST(ctr1.ctr_total_return AS Decimal128(30, 15)) > __scalar_sq_1.avg(ctr2.ctr_total_return) * Float64(1.2) | +| | Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer.c_customer_id, customer.c_current_addr_sk, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_day, customer.c_birth_month, customer.c_birth_year, customer.c_birth_country, customer.c_login, customer.c_email_address, customer.c_last_review_date_sk | +| | Inner Join: ctr1.ctr_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: ctr1 | +| | SubqueryAlias: customer_total_return | +| | Projection: web_returns.wr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return | +| | Aggregate: groupBy=[[web_returns.wr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(web_returns.wr_return_amt)]] | +| | Projection: web_returns.wr_returning_customer_sk, web_returns.wr_return_amt, customer_address.ca_state | +| | Inner Join: web_returns.wr_returning_addr_sk = customer_address.ca_address_sk | +| | Projection: web_returns.wr_returning_customer_sk, web_returns.wr_returning_addr_sk, web_returns.wr_return_amt | +| | Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_day, c_birth_month, c_birth_year, c_birth_country, c_login, c_email_address, c_last_review_date_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = LargeUtf8("KS")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(CAST(avg(ctr2.ctr_total_return) AS Float64) * Float64(1.2) AS Decimal128(30, 15)), ctr2.ctr_state | +| | Aggregate: groupBy=[[ctr2.ctr_state]], aggr=[[avg(ctr2.ctr_total_return)]] | +| | SubqueryAlias: ctr2 | +| | SubqueryAlias: customer_total_return | +| | Projection: customer_address.ca_state AS ctr_state, sum(web_returns.wr_return_amt) AS ctr_total_return | +| | Aggregate: groupBy=[[web_returns.wr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(web_returns.wr_return_amt)]] | +| | Projection: web_returns.wr_returning_customer_sk, web_returns.wr_return_amt, customer_address.ca_state | +| | Inner Join: web_returns.wr_returning_addr_sk = customer_address.ca_address_sk | +| | Projection: web_returns.wr_returning_customer_sk, web_returns.wr_returning_addr_sk, web_returns.wr_return_amt | +| | Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| physical_plan | SortPreservingMergeExec: [c_customer_id@0 ASC NULLS LAST, c_salutation@1 ASC NULLS LAST, c_first_name@2 ASC NULLS LAST, c_last_name@3 ASC NULLS LAST, c_preferred_cust_flag@4 ASC NULLS LAST, c_birth_day@5 ASC NULLS LAST, c_birth_month@6 ASC NULLS LAST, c_birth_year@7 ASC NULLS LAST, c_birth_country@8 ASC NULLS LAST, c_login@9 ASC NULLS LAST, c_email_address@10 ASC NULLS LAST, c_last_review_date_sk@11 ASC NULLS LAST, ctr_total_return@12 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[c_customer_id@0 ASC NULLS LAST, c_salutation@1 ASC NULLS LAST, c_first_name@2 ASC NULLS LAST, c_last_name@3 ASC NULLS LAST, c_preferred_cust_flag@4 ASC NULLS LAST, c_birth_day@5 ASC NULLS LAST, c_birth_month@6 ASC NULLS LAST, c_birth_year@7 ASC NULLS LAST, c_birth_country@8 ASC NULLS LAST, c_login@9 ASC NULLS LAST, c_email_address@10 ASC NULLS LAST, c_last_review_date_sk@11 ASC NULLS LAST, ctr_total_return@12 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_customer_id@1 as c_customer_id, c_salutation@2 as c_salutation, c_first_name@3 as c_first_name, c_last_name@4 as c_last_name, c_preferred_cust_flag@5 as c_preferred_cust_flag, c_birth_day@6 as c_birth_day, c_birth_month@7 as c_birth_month, c_birth_year@8 as c_birth_year, c_birth_country@9 as c_birth_country, c_login@10 as c_login, c_email_address@11 as c_email_address, c_last_review_date_sk@12 as c_last_review_date_sk, ctr_total_return@0 as ctr_total_return] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ctr_state@0, ctr_state@1)], filter=CAST(ctr_total_return@0 AS Decimal128(30, 15)) > avg(ctr2.ctr_total_return) * Float64(1.2)@1, projection=[ctr_total_return@1, c_customer_id@2, c_salutation@3, c_first_name@4, c_last_name@5, c_preferred_cust_flag@6, c_birth_day@7, c_birth_month@8, c_birth_year@9, c_birth_country@10, c_login@11, c_email_address@12, c_last_review_date_sk@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_state@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@3, ca_address_sk@0)], projection=[ctr_state@0, ctr_total_return@1, c_customer_id@2, c_salutation@4, c_first_name@5, c_last_name@6, c_preferred_cust_flag@7, c_birth_day@8, c_birth_month@9, c_birth_year@10, c_birth_country@11, c_login@12, c_email_address@13, c_last_review_date_sk@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ctr_customer_sk@0, c_customer_sk@0)], projection=[ctr_state@1, ctr_total_return@2, c_customer_id@4, c_current_addr_sk@5, c_salutation@6, c_first_name@7, c_last_name@8, c_preferred_cust_flag@9, c_birth_day@10, c_birth_month@11, c_birth_year@12, c_birth_country@13, c_login@14, c_email_address@15, c_last_review_date_sk@16] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_customer_sk@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[wr_returning_customer_sk@0 as ctr_customer_sk, ca_state@1 as ctr_state, sum(web_returns.wr_return_amt)@2 as ctr_total_return] | +| | AggregateExec: mode=FinalPartitioned, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(web_returns.wr_return_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returning_customer_sk@0, ca_state@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(web_returns.wr_return_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_returning_addr_sk@1, ca_address_sk@0)], projection=[wr_returning_customer_sk@0, wr_return_amt@2, ca_state@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returning_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_returned_date_sk@0, d_date_sk@0)], projection=[wr_returning_customer_sk@1, wr_returning_addr_sk@2, wr_return_amt@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returned_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_day, c_birth_month, c_birth_year, c_birth_country, c_login, c_email_address, c_last_review_date_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_state@8 = KS, pruning_predicate=ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= KS AND KS <= ca_state_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(CAST(avg(ctr2.ctr_total_return)@1 AS Float64) * 1.2 AS Decimal128(30, 15)) as avg(ctr2.ctr_total_return) * Float64(1.2), ctr_state@0 as ctr_state] | +| | AggregateExec: mode=FinalPartitioned, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_state@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] | +| | ProjectionExec: expr=[ca_state@1 as ctr_state, sum(web_returns.wr_return_amt)@2 as ctr_total_return] | +| | AggregateExec: mode=FinalPartitioned, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(web_returns.wr_return_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returning_customer_sk@0, ca_state@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[wr_returning_customer_sk@0 as wr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(web_returns.wr_return_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_returning_addr_sk@1, ca_address_sk@0)], projection=[wr_returning_customer_sk@0, wr_return_amt@2, ca_state@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returning_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_returned_date_sk@0, d_date_sk@0)], projection=[wr_returning_customer_sk@1, wr_returning_addr_sk@2, wr_return_amt@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returned_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_returned_date_sk, wr_returning_customer_sk, wr_returning_addr_sk, wr_return_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q31_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q31_explain.snap new file mode 100644 index 0000000000..1e59272462 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q31_explain.snap @@ -0,0 +1,277 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q31" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: ss1.ca_county ASC NULLS LAST | +| | Projection: ss1.ca_county, ss1.d_year, ws2.web_sales / ws1.web_sales AS web_q1_q2_increase, ss2.store_sales / ss1.store_sales AS store_q1_q2_increase, ws3.web_sales / ws2.web_sales AS web_q2_q3_increase, ss3.store_sales / ss2.store_sales AS store_q2_q3_increase | +| | Inner Join: ws1.ca_county = ws3.ca_county Filter: CASE WHEN ws2.web_sales > Decimal128(Some(0),17,2) THEN ws3.web_sales / ws2.web_sales ELSE Decimal128(None,23,6) END > CASE WHEN ss2.store_sales > Decimal128(Some(0),17,2) THEN ss3.store_sales / ss2.store_sales ELSE Decimal128(None,23,6) END | +| | Projection: ss1.ca_county, ss1.d_year, ss1.store_sales, ss2.store_sales, ss3.store_sales, ws1.ca_county, ws1.web_sales, ws2.web_sales | +| | Inner Join: ws1.ca_county = ws2.ca_county Filter: CASE WHEN ws1.web_sales > Decimal128(Some(0),17,2) THEN ws2.web_sales / ws1.web_sales ELSE Decimal128(None,23,6) END > CASE WHEN ss1.store_sales > Decimal128(Some(0),17,2) THEN ss2.store_sales / ss1.store_sales ELSE Decimal128(None,23,6) END | +| | Inner Join: ss1.ca_county = ws1.ca_county | +| | Projection: ss1.ca_county, ss1.d_year, ss1.store_sales, ss2.store_sales, ss3.store_sales | +| | Inner Join: ss2.ca_county = ss3.ca_county | +| | Inner Join: ss1.ca_county = ss2.ca_county | +| | SubqueryAlias: ss1 | +| | SubqueryAlias: ss | +| | Projection: customer_address.ca_county, date_dim.d_year, sum(store_sales.ss_ext_sales_price) AS store_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_addr_sk, store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], full_filters=[date_dim.d_qoy = Int32(1), date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | SubqueryAlias: ss2 | +| | SubqueryAlias: ss | +| | Projection: customer_address.ca_county, sum(store_sales.ss_ext_sales_price) AS store_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_addr_sk, store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], full_filters=[date_dim.d_qoy = Int32(2), date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | SubqueryAlias: ss3 | +| | SubqueryAlias: ss | +| | Projection: customer_address.ca_county, sum(store_sales.ss_ext_sales_price) AS store_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_addr_sk, store_sales.ss_ext_sales_price, date_dim.d_year, date_dim.d_qoy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], full_filters=[date_dim.d_qoy = Int32(3), date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | SubqueryAlias: ws1 | +| | SubqueryAlias: ws | +| | Projection: customer_address.ca_county, sum(web_sales.ws_ext_sales_price) AS web_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Projection: web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county | +| | Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], full_filters=[date_dim.d_qoy = Int32(1), date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | SubqueryAlias: ws2 | +| | SubqueryAlias: ws | +| | Projection: customer_address.ca_county, sum(web_sales.ws_ext_sales_price) AS web_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Projection: web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county | +| | Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], full_filters=[date_dim.d_qoy = Int32(2), date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| | SubqueryAlias: ws3 | +| | SubqueryAlias: ws | +| | Projection: customer_address.ca_county, sum(web_sales.ws_ext_sales_price) AS web_sales | +| | Aggregate: groupBy=[[customer_address.ca_county, date_dim.d_qoy, date_dim.d_year]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Projection: web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy, customer_address.ca_county | +| | Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price, date_dim.d_year, date_dim.d_qoy | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy], full_filters=[date_dim.d_qoy = Int32(3), date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county] | +| physical_plan | SortPreservingMergeExec: [ca_county@0 ASC NULLS LAST] | +| | SortExec: expr=[ca_county@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ca_county@0 as ca_county, d_year@1 as d_year, web_sales@6 / web_sales@5 as web_q1_q2_increase, store_sales@3 / store_sales@2 as store_q1_q2_increase, web_sales@7 / web_sales@6 as web_q2_q3_increase, store_sales@4 / store_sales@3 as store_q2_q3_increase] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_county@5, ca_county@0)], filter=CASE WHEN web_sales@2 > Some(0),17,2 THEN web_sales@3 / web_sales@2 END > CASE WHEN store_sales@0 > Some(0),17,2 THEN store_sales@1 / store_sales@0 END, projection=[ca_county@0, d_year@1, store_sales@2, store_sales@3, store_sales@4, web_sales@6, web_sales@7, web_sales@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_county@5, ca_county@0)], filter=CASE WHEN web_sales@2 > Some(0),17,2 THEN web_sales@3 / web_sales@2 END > CASE WHEN store_sales@0 > Some(0),17,2 THEN store_sales@1 / store_sales@0 END, projection=[ca_county@0, d_year@1, store_sales@2, store_sales@3, store_sales@4, ca_county@5, web_sales@6, web_sales@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_county@0, ca_county@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_county@3, ca_county@0)], projection=[ca_county@0, d_year@1, store_sales@2, store_sales@4, store_sales@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_county@0, ca_county@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ca_county@0 as ca_county, d_year@2 as d_year, sum(store_sales.ss_ext_sales_price)@3 as store_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@0, ca_address_sk@0)], projection=[ss_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_addr_sk@1, ss_ext_sales_price@2, d_year@4, d_qoy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy], predicate=d_qoy@10 = 1 AND d_year@6 = 1999, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 1 AND 1 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ca_county@0 as ca_county, sum(store_sales.ss_ext_sales_price)@3 as store_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@0, ca_address_sk@0)], projection=[ss_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_addr_sk@1, ss_ext_sales_price@2, d_year@4, d_qoy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy], predicate=d_qoy@10 = 2 AND d_year@6 = 1999, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 2 AND 2 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ca_county@0 as ca_county, sum(store_sales.ss_ext_sales_price)@3 as store_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@0, ca_address_sk@0)], projection=[ss_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_addr_sk@1, ss_ext_sales_price@2, d_year@4, d_qoy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_addr_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy], predicate=d_qoy@10 = 3 AND d_year@6 = 1999, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 3 AND 3 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ca_county@0 as ca_county, sum(web_sales.ws_ext_sales_price)@3 as web_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_addr_sk@0, ca_address_sk@0)], projection=[ws_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_bill_addr_sk@1, ws_ext_sales_price@2, d_year@4, d_qoy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy], predicate=d_qoy@10 = 1 AND d_year@6 = 1999, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 1 AND 1 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ca_county@0 as ca_county, sum(web_sales.ws_ext_sales_price)@3 as web_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_addr_sk@0, ca_address_sk@0)], projection=[ws_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_bill_addr_sk@1, ws_ext_sales_price@2, d_year@4, d_qoy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy], predicate=d_qoy@10 = 2 AND d_year@6 = 1999, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 2 AND 2 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ca_county@0 as ca_county, sum(web_sales.ws_ext_sales_price)@3 as web_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_county@0 as ca_county, d_qoy@1 as d_qoy, d_year@2 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@0, d_qoy@1, d_year@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_county@3 as ca_county, d_qoy@2 as d_qoy, d_year@1 as d_year], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_addr_sk@0, ca_address_sk@0)], projection=[ws_ext_sales_price@1, d_year@2, d_qoy@3, ca_county@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_bill_addr_sk@1, ws_ext_sales_price@2, d_year@4, d_qoy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy], predicate=d_qoy@10 = 3 AND d_year@6 = 1999, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 3 AND 3 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q32_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q32_explain.snap new file mode 100644 index 0000000000..73e054a243 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q32_explain.snap @@ -0,0 +1,78 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q32" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: sum(catalog_sales.cs_ext_discount_amt) AS excess discount amount | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[sum(catalog_sales.cs_ext_discount_amt)]] | +| | Projection: catalog_sales.cs_ext_discount_amt | +| | Inner Join: item.i_item_sk = __scalar_sq_1.cs_item_sk Filter: CAST(catalog_sales.cs_ext_discount_amt AS Decimal128(30, 15)) > __scalar_sq_1.Float64(1.3) * avg(catalog_sales.cs_ext_discount_amt) | +| | Projection: catalog_sales.cs_ext_discount_amt, item.i_item_sk | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, item.i_item_sk | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_manufact_id = Int32(283)] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("1999-02-22"), date_dim.d_date <= Date32("1999-05-23")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(Float64(1.3) * CAST(avg(catalog_sales.cs_ext_discount_amt) AS Float64) AS Decimal128(30, 15)), catalog_sales.cs_item_sk | +| | Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[avg(catalog_sales.cs_ext_discount_amt)]] | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_discount_amt | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("1999-02-22"), date_dim.d_date <= Date32("1999-05-23")] | +| physical_plan | ProjectionExec: expr=[sum(catalog_sales.cs_ext_discount_amt)@0 as excess discount amount] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(catalog_sales.cs_ext_discount_amt)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(catalog_sales.cs_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@1, cs_item_sk@1)], filter=CAST(cs_ext_discount_amt@0 AS Decimal128(30, 15)) > Float64(1.3) * avg(catalog_sales.cs_ext_discount_amt)@1, projection=[cs_ext_discount_amt@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_ext_discount_amt@1, i_item_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@1, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_ext_discount_amt@2, i_item_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_manufact_id@13 = 283, pruning_predicate=i_manufact_id_null_count@2 != i_manufact_id_row_count@3 AND i_manufact_id_min@0 <= 283 AND 283 <= i_manufact_id_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 1999-02-22 AND d_date@2 <= 1999-05-23, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 1999-02-22 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 1999-05-23, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(1.3 * CAST(avg(catalog_sales.cs_ext_discount_amt)@1 AS Float64) AS Decimal128(30, 15)) as Float64(1.3) * avg(catalog_sales.cs_ext_discount_amt), cs_item_sk@0 as cs_item_sk] | +| | AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[avg(catalog_sales.cs_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cs_item_sk@0 as cs_item_sk], aggr=[avg(catalog_sales.cs_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_item_sk@1, cs_ext_discount_amt@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_discount_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 1999-02-22 AND d_date@2 <= 1999-05-23, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 1999-02-22 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 1999-05-23, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q33_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q33_explain.snap new file mode 100644 index 0000000000..e84835af3b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q33_explain.snap @@ -0,0 +1,202 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q33" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: total_sales ASC NULLS LAST, fetch=100 | +| | Projection: tmp1.i_manufact_id, sum(tmp1.total_sales) AS total_sales | +| | Aggregate: groupBy=[[tmp1.i_manufact_id]], aggr=[[sum(tmp1.total_sales)]] | +| | SubqueryAlias: tmp1 | +| | Union | +| | SubqueryAlias: ss | +| | Projection: item.i_manufact_id, sum(store_sales.ss_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | LeftSemi Join: item.i_manufact_id = __correlated_sq_1.i_manufact_id | +| | Projection: store_sales.ss_ext_sales_price, item.i_manufact_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1999), date_dim.d_moy = Int32(4)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-500),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_manufact_id] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_manufact_id], full_filters=[item.i_category = LargeUtf8("Books")] | +| | SubqueryAlias: cs | +| | Projection: item.i_manufact_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | LeftSemi Join: item.i_manufact_id = __correlated_sq_2.i_manufact_id | +| | Projection: catalog_sales.cs_ext_sales_price, item.i_manufact_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price | +| | Inner Join: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: catalog_sales.cs_bill_addr_sk, catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1999), date_dim.d_moy = Int32(4)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-500),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_manufact_id] | +| | SubqueryAlias: __correlated_sq_2 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_manufact_id], full_filters=[item.i_category = LargeUtf8("Books")] | +| | SubqueryAlias: ws | +| | Projection: item.i_manufact_id, sum(web_sales.ws_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_manufact_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | LeftSemi Join: item.i_manufact_id = __correlated_sq_3.i_manufact_id | +| | Projection: web_sales.ws_ext_sales_price, item.i_manufact_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_ext_sales_price | +| | Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1999), date_dim.d_moy = Int32(4)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-500),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_manufact_id] | +| | SubqueryAlias: __correlated_sq_3 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_manufact_id], full_filters=[item.i_category = LargeUtf8("Books")] | +| physical_plan | SortPreservingMergeExec: [total_sales@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[total_sales@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(tmp1.total_sales)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_manufact_id@0 as i_manufact_id], aggr=[sum(tmp1.total_sales)] | +| | InterleaveExec | +| | ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(store_sales.ss_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_manufact_id@1 as i_manufact_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_manufact_id@1, i_manufact_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_ext_sales_price@1, i_manufact_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_addr_sk@2, ss_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1999 AND d_moy@8 = 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 4 AND 4 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-500),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-500),5,2 AND Some(-500),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_manufact_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_manufact_id], predicate=i_category@12 = Books, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Books AND Books <= i_category_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(catalog_sales.cs_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_manufact_id@1 as i_manufact_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_manufact_id@1, i_manufact_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_ext_sales_price@1, i_manufact_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_addr_sk@0, ca_address_sk@0)], projection=[cs_item_sk@1, cs_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_bill_addr_sk@1, cs_item_sk@2, cs_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1999 AND d_moy@8 = 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 4 AND 4 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-500),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-500),5,2 AND Some(-500),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_manufact_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_manufact_id], predicate=i_category@12 = Books, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Books AND Books <= i_category_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(web_sales.ws_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_manufact_id@1 as i_manufact_id], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_manufact_id@1, i_manufact_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_ext_sales_price@1, i_manufact_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_addr_sk@1, ca_address_sk@0)], projection=[ws_item_sk@0, ws_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_bill_addr_sk@2, ws_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1999 AND d_moy@8 = 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 4 AND 4 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-500),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-500),5,2 AND Some(-500),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_manufact_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_manufact_id], predicate=i_category@12 = Books, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Books AND Books <= i_category_max@1, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q34_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q34_explain.snap new file mode 100644 index 0000000000..1c884e09a8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q34_explain.snap @@ -0,0 +1,80 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q34" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_preferred_cust_flag DESC NULLS FIRST, dn.ss_ticket_number ASC NULLS LAST | +| | Projection: customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dn.ss_ticket_number, dn.cnt | +| | Inner Join: dn.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: dn | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(*) AS cnt | +| | Filter: count(*) >= Int64(15) AND count(*) <= Int64(20) | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_ticket_number | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_ticket_number | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_dom >= Int32(1) AND date_dim.d_dom <= Int32(3) OR date_dim.d_dom >= Int32(25) AND date_dim.d_dom <= Int32(28), date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_county IN ([LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County")])] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_buy_potential = LargeUtf8("501-1000") OR household_demographics.hd_buy_potential = LargeUtf8("Unknown"), household_demographics.hd_vehicle_count > Int32(0), CAST(CASE WHEN household_demographics.hd_vehicle_count > Int32(0) THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE Int32(NULL) END AS Float64) > Float64(1.2)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] | +| physical_plan | SortPreservingMergeExec: [c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, c_salutation@2 ASC NULLS LAST, c_preferred_cust_flag@3 DESC, ss_ticket_number@4 ASC NULLS LAST] | +| | SortExec: expr=[c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, c_salutation@2 ASC NULLS LAST, c_preferred_cust_flag@3 DESC, ss_ticket_number@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_last_name@4 as c_last_name, c_first_name@3 as c_first_name, c_salutation@2 as c_salutation, c_preferred_cust_flag@5 as c_preferred_cust_flag, ss_ticket_number@0 as ss_ticket_number, cnt@1 as cnt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_ticket_number@0, cnt@2, c_salutation@4, c_first_name@5, c_last_name@6, c_preferred_cust_flag@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, count(*)@2 as cnt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: count(*)@2 >= 15 AND count(*)@2 <= 20 | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_ticket_number@1 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_customer_sk@0, ss_ticket_number@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@2, s_store_sk@0)], projection=[ss_customer_sk@0, ss_hdemo_sk@1, ss_ticket_number@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_store_sk@3, ss_ticket_number@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=(d_dom@9 >= 1 AND d_dom@9 <= 3 OR d_dom@9 >= 25 AND d_dom@9 <= 28) AND (d_year@6 = 2000 OR d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=(d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_max@0 >= 1 AND d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_min@3 <= 3 OR d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_max@0 >= 25 AND d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_min@3 <= 28) AND (d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2002 AND 2002 <= d_year_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=Use s_county@23 IN (SET) ([Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }]), pruning_predicate=s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=(hd_buy_potential@2 = 501-1000 OR hd_buy_potential@2 = Unknown) AND hd_vehicle_count@4 > 0 AND CAST(CASE WHEN hd_vehicle_count@4 > 0 THEN hd_dep_count@3 / hd_vehicle_count@4 END AS Float64) > 1.2, pruning_predicate=(hd_buy_potential_null_count@2 != hd_buy_potential_row_count@3 AND hd_buy_potential_min@0 <= 501-1000 AND 501-1000 <= hd_buy_potential_max@1 OR hd_buy_potential_null_count@2 != hd_buy_potential_row_count@3 AND hd_buy_potential_min@0 <= Unknown AND Unknown <= hd_buy_potential_max@1) AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_max@4 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q35_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q35_explain.snap new file mode 100644 index 0000000000..d749d26c22 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q35_explain.snap @@ -0,0 +1,128 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q35" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: ca.ca_state ASC NULLS LAST, customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_dep_count ASC NULLS LAST, customer_demographics.cd_dep_employed_count ASC NULLS LAST, customer_demographics.cd_dep_college_count ASC NULLS LAST, fetch=100 | +| | Projection: ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, count(*) AS cnt1, max(customer_demographics.cd_dep_count), stddev(customer_demographics.cd_dep_count) AS stddev_dep_count_1, stddev(customer_demographics.cd_dep_count) AS stddev_dep_count_2, customer_demographics.cd_dep_employed_count, count(*) AS cnt2, max(customer_demographics.cd_dep_employed_count), stddev(customer_demographics.cd_dep_employed_count) AS stddev_dep_employed_count_1, stddev(customer_demographics.cd_dep_employed_count) AS stddev_dep_employed_count_2, customer_demographics.cd_dep_college_count, count(*) AS cnt3, max(customer_demographics.cd_dep_college_count), stddev(customer_demographics.cd_dep_college_count) AS stddev_dep_college_count_1, stddev(customer_demographics.cd_dep_college_count) AS stddev_dep_college_count_2 | +| | Aggregate: groupBy=[[ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count]], aggr=[[count(Int64(1)) AS count(*), max(customer_demographics.cd_dep_count), stddev(customer_demographics.cd_dep_count), max(customer_demographics.cd_dep_employed_count), stddev(customer_demographics.cd_dep_employed_count), max(customer_demographics.cd_dep_college_count), stddev(customer_demographics.cd_dep_college_count)]] | +| | Projection: ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count | +| | Filter: __correlated_sq_2.mark OR __correlated_sq_3.mark | +| | Projection: ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count, __correlated_sq_2.mark, __correlated_sq_3.mark | +| | LeftMark Join: c.c_customer_sk = __correlated_sq_3.cs_ship_customer_sk | +| | LeftMark Join: c.c_customer_sk = __correlated_sq_2.ws_bill_customer_sk | +| | LeftSemi Join: c.c_customer_sk = __correlated_sq_1.ss_customer_sk | +| | Projection: c.c_customer_sk, ca.ca_state, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_dep_count, customer_demographics.cd_dep_employed_count, customer_demographics.cd_dep_college_count | +| | Inner Join: c.c_current_cdemo_sk = customer_demographics.cd_demo_sk | +| | Projection: c.c_customer_sk, c.c_current_cdemo_sk, ca.ca_state | +| | Inner Join: c.c_current_addr_sk = ca.ca_address_sk | +| | SubqueryAlias: c | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | SubqueryAlias: ca | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: store_sales.ss_customer_sk | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000), date_dim.d_qoy < Int32(4)] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_bill_customer_sk | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000), date_dim.d_qoy < Int32(4)] | +| | SubqueryAlias: __correlated_sq_3 | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_customer_sk | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000), date_dim.d_qoy < Int32(4)] | +| physical_plan | SortPreservingMergeExec: [ca_state@0 ASC NULLS LAST, cd_gender@1 ASC NULLS LAST, cd_marital_status@2 ASC NULLS LAST, cd_dep_count@3 ASC NULLS LAST, cd_dep_employed_count@8 ASC NULLS LAST, cd_dep_college_count@13 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[ca_state@0 ASC NULLS LAST, cd_gender@1 ASC NULLS LAST, cd_marital_status@2 ASC NULLS LAST, cd_dep_count@3 ASC NULLS LAST, cd_dep_employed_count@8 ASC NULLS LAST, cd_dep_college_count@13 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ca_state@0 as ca_state, cd_gender@1 as cd_gender, cd_marital_status@2 as cd_marital_status, cd_dep_count@3 as cd_dep_count, count(*)@6 as cnt1, max(customer_demographics.cd_dep_count)@7 as max(customer_demographics.cd_dep_count), stddev(customer_demographics.cd_dep_count)@8 as stddev_dep_count_1, stddev(customer_demographics.cd_dep_count)@8 as stddev_dep_count_2, cd_dep_employed_count@4 as cd_dep_employed_count, count(*)@6 as cnt2, max(customer_demographics.cd_dep_employed_count)@9 as max(customer_demographics.cd_dep_employed_count), stddev(customer_demographics.cd_dep_employed_count)@10 as stddev_dep_employed_count_1, stddev(customer_demographics.cd_dep_employed_count)@10 as stddev_dep_employed_count_2, cd_dep_college_count@5 as cd_dep_college_count, count(*)@6 as cnt3, max(customer_demographics.cd_dep_college_count)@11 as max(customer_demographics.cd_dep_college_count), stddev(customer_demographics.cd_dep_college_count)@12 as stddev_dep_college_count_1, stddev(customer_demographics.cd_dep_college_count)@12 as stddev_dep_college_count_2] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_state@0 as ca_state, cd_gender@1 as cd_gender, cd_marital_status@2 as cd_marital_status, cd_dep_count@3 as cd_dep_count, cd_dep_employed_count@4 as cd_dep_employed_count, cd_dep_college_count@5 as cd_dep_college_count], aggr=[count(*), max(customer_demographics.cd_dep_count), stddev(customer_demographics.cd_dep_count), max(customer_demographics.cd_dep_employed_count), stddev(customer_demographics.cd_dep_employed_count), max(customer_demographics.cd_dep_college_count), stddev(customer_demographics.cd_dep_college_count)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_state@0, cd_gender@1, cd_marital_status@2, cd_dep_count@3, cd_dep_employed_count@4, cd_dep_college_count@5], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_state@0 as ca_state, cd_gender@1 as cd_gender, cd_marital_status@2 as cd_marital_status, cd_dep_count@3 as cd_dep_count, cd_dep_employed_count@4 as cd_dep_employed_count, cd_dep_college_count@5 as cd_dep_college_count], aggr=[count(*), max(customer_demographics.cd_dep_count), stddev(customer_demographics.cd_dep_count), max(customer_demographics.cd_dep_employed_count), stddev(customer_demographics.cd_dep_employed_count), max(customer_demographics.cd_dep_college_count), stddev(customer_demographics.cd_dep_college_count)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: mark@6 OR mark@7, projection=[ca_state@0, cd_gender@1, cd_marital_status@2, cd_dep_count@3, cd_dep_employed_count@4, cd_dep_college_count@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftMark, on=[(c_customer_sk@0, cs_ship_customer_sk@1)], projection=[ca_state@1, cd_gender@2, cd_marital_status@3, cd_dep_count@4, cd_dep_employed_count@5, cd_dep_college_count@6, mark@7, mark@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftMark, on=[(c_customer_sk@0, ws_bill_customer_sk@1)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(c_customer_sk@0, ss_customer_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_sk@0, ca_state@2, cd_gender@4, cd_marital_status@5, cd_dep_count@6, cd_dep_employed_count@7, cd_dep_college_count@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@2, ca_address_sk@0)], projection=[c_customer_sk@0, c_current_cdemo_sk@1, ca_state@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@2], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_dep_count, cd_dep_employed_count, cd_dep_college_count] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000 AND d_qoy@10 < 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_qoy_null_count@5 != d_qoy_row_count@6 AND d_qoy_min@4 < 4, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_sold_date_sk@0, ws_bill_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000 AND d_qoy@10 < 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_qoy_null_count@5 != d_qoy_row_count@6 AND d_qoy_min@4 < 4, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_ship_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000 AND d_qoy@10 < 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_qoy_null_count@5 != d_qoy_row_count@6 AND d_qoy_min@4 < 4, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q36_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q36_explain.snap new file mode 100644 index 0000000000..4247550e4f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q36_explain.snap @@ -0,0 +1,70 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q36" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lochierarchy DESC NULLS FIRST, CASE WHEN lochierarchy = Int32(0) THEN item.i_category END AS CASE WHEN lochierarchy = Int64(0) THEN item.i_category END ASC NULLS LAST, rank_within_parent ASC NULLS LAST, fetch=100 | +| | Projection: sum(store_sales.ss_net_profit) / sum(store_sales.ss_ext_sales_price) AS gross_margin, item.i_category, item.i_class, grouping(item.i_category) + grouping(item.i_class) AS lochierarchy, rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(store_sales.ss_net_profit) / sum(store_sales.ss_ext_sales_price) ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank_within_parent | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int32(0) THEN item.i_category END] ORDER BY [sum(store_sales.ss_net_profit) / sum(store_sales.ss_ext_sales_price) ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(store_sales.ss_net_profit) / sum(store_sales.ss_ext_sales_price) ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Projection: item.i_category, item.i_class, sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price), CAST(__grouping_id & UInt8(2) >> UInt8(1) AS Int32) AS grouping(item.i_category), CAST(__grouping_id & UInt8(1) AS Int32) AS grouping(item.i_class) | +| | Aggregate: groupBy=[[ROLLUP (item.i_category, item.i_class)]], aggr=[[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, item.i_class, item.i_category | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_class, i_category] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_state IN ([LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN"), LargeUtf8("TN")])] | +| physical_plan | SortPreservingMergeExec: [lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[sum(store_sales.ss_net_profit)@2 / sum(store_sales.ss_ext_sales_price)@3 as gross_margin, i_category@0 as i_category, i_class@1 as i_class, grouping(item.i_category)@4 + grouping(item.i_class)@5 as lochierarchy, rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(store_sales.ss_net_profit) / sum(store_sales.ss_ext_sales_price) ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rank_within_parent] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(store_sales.ss_net_profit) / sum(store_sales.ss_ext_sales_price) ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(store_sales.ss_net_profit) / sum(store_sales.ss_ext_sales_price) ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,23,6)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[grouping(item.i_category)@4 + grouping(item.i_class)@5 ASC NULLS LAST, CASE WHEN grouping(item.i_class)@5 = 0 THEN i_category@0 END ASC NULLS LAST, sum(store_sales.ss_net_profit)@2 / sum(store_sales.ss_ext_sales_price)@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([grouping(item.i_category)@4 + grouping(item.i_class)@5, CASE WHEN grouping(item.i_class)@5 = 0 THEN i_category@0 END], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, sum(store_sales.ss_net_profit)@3 as sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)@4 as sum(store_sales.ss_ext_sales_price), CAST(__grouping_id@2 & 2 >> 1 AS Int32) as grouping(item.i_category), CAST(__grouping_id@2 & 1 AS Int32) as grouping(item.i_class)] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class, __grouping_id@2 as __grouping_id], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_class@1, __grouping_id@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[(NULL as i_category, NULL as i_class), (i_category@3 as i_category, NULL as i_class), (i_category@3 as i_category, i_class@2 as i_class)], aggr=[sum(store_sales.ss_net_profit), sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)], projection=[ss_ext_sales_price@1, ss_net_profit@2, i_class@3, i_category@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_store_sk@1, ss_ext_sales_price@2, ss_net_profit@3, i_class@5, i_category@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_ext_sales_price@3, ss_net_profit@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_class, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=Use s_state@24 IN (SET) ([Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }, Literal { value: LargeUtf8("TN") }]), pruning_predicate=s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1 OR s_state_null_count@2 != s_state_row_count@3 AND s_state_min@0 <= TN AND TN <= s_state_max@1, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q37_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q37_explain.snap new file mode 100644 index 0000000000..bf4949bcbf --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q37_explain.snap @@ -0,0 +1,59 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q37" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_current_price]], aggr=[[]] | +| | Projection: item.i_item_id, item.i_item_desc, item.i_current_price | +| | Inner Join: item.i_item_sk = catalog_sales.cs_item_sk | +| | Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price | +| | Inner Join: inventory.inv_date_sk = date_dim.d_date_sk | +| | Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price, inventory.inv_date_sk | +| | Inner Join: item.i_item_sk = inventory.inv_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], full_filters=[item.i_current_price >= Decimal128(Some(2600),7,2), item.i_current_price <= Decimal128(Some(5600),7,2), item.i_manufact_id IN ([Int32(744), Int32(884), Int32(722), Int32(693)])] | +| | BytesProcessedNode | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk], full_filters=[inventory.inv_quantity_on_hand >= Int32(100), inventory.inv_quantity_on_hand <= Int32(500)] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-06-09"), date_dim.d_date <= Date32("2001-08-08")] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_item_sk] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_current_price@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@0)], projection=[i_item_id@1, i_item_desc@2, i_current_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_date_sk@4, d_date_sk@0)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_date_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@1)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3, inv_date_sk@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], predicate=i_current_price@5 >= Some(2600),7,2 AND i_current_price@5 <= Some(5600),7,2 AND Use i_manufact_id@13 IN (SET) ([Literal { value: Int32(744) }, Literal { value: Int32(884) }, Literal { value: Int32(722) }, Literal { value: Int32(693) }]), pruning_predicate=i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_max@0 >= Some(2600),7,2 AND i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_min@3 <= Some(5600),7,2 AND (i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 744 AND 744 <= i_manufact_id_max@5 OR i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 884 AND 884 <= i_manufact_id_max@5 OR i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 722 AND 722 <= i_manufact_id_max@5 OR i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 693 AND 693 <= i_manufact_id_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/inventory/inventory.parquet:0..2678460], [tpcds_sf1/inventory/inventory.parquet:2678460..5356920], [tpcds_sf1/inventory/inventory.parquet:5356920..8035380], [tpcds_sf1/inventory/inventory.parquet:8035380..10713840], [tpcds_sf1/inventory/inventory.parquet:10713840..13392300], ...]}, projection=[inv_date_sk, inv_item_sk], predicate=inv_quantity_on_hand@3 >= 100 AND inv_quantity_on_hand@3 <= 500, pruning_predicate=inv_quantity_on_hand_null_count@1 != inv_quantity_on_hand_row_count@2 AND inv_quantity_on_hand_max@0 >= 100 AND inv_quantity_on_hand_null_count@1 != inv_quantity_on_hand_row_count@2 AND inv_quantity_on_hand_min@3 <= 500, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-06-09 AND d_date@2 <= 2001-08-08, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-06-09 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-08-08, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_item_sk] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q38_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q38_explain.snap new file mode 100644 index 0000000000..ea243e965b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q38_explain.snap @@ -0,0 +1,134 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q38" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | SubqueryAlias: hot_cust | +| | Projection: | +| | LeftSemi Join: customer.c_last_name = customer.c_last_name, customer.c_first_name = customer.c_first_name, date_dim.d_date = date_dim.d_date | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | LeftSemi Join: customer.c_last_name = customer.c_last_name, customer.c_first_name = customer.c_first_name, date_dim.d_date = date_dim.d_date | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date | +| | Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Projection: store_sales.ss_customer_sk, date_dim.d_date | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1190), date_dim.d_month_seq <= Int32(1201)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date | +| | Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk | +| | Projection: catalog_sales.cs_bill_customer_sk, date_dim.d_date | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1190), date_dim.d_month_seq <= Int32(1201)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date | +| | Inner Join: web_sales.ws_bill_customer_sk = customer.c_customer_sk | +| | Projection: web_sales.ws_bill_customer_sk, date_dim.d_date | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1190), date_dim.d_month_seq <= Int32(1201)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| physical_plan | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)] | +| | AggregateExec: mode=SinglePartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | ProjectionExec: expr=[c_last_name@2 as c_last_name, c_first_name@1 as c_first_name, d_date@0 as d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@0, c_customer_sk@0)], projection=[d_date@1, c_first_name@3, c_last_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1, d_date@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1190 AND d_month_seq@3 <= 1201, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1190 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1201, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_first_name, c_last_name] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | ProjectionExec: expr=[c_last_name@2 as c_last_name, c_first_name@1 as c_first_name, d_date@0 as d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_customer_sk@0, c_customer_sk@0)], projection=[d_date@1, c_first_name@3, c_last_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_bill_customer_sk@1, d_date@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1190 AND d_month_seq@3 <= 1201, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1190 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1201, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_first_name, c_last_name] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | ProjectionExec: expr=[c_last_name@2 as c_last_name, c_first_name@1 as c_first_name, d_date@0 as d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_customer_sk@0, c_customer_sk@0)], projection=[d_date@1, c_first_name@3, c_last_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_bill_customer_sk@1, d_date@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1190 AND d_month_seq@3 <= 1201, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1190 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1201, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_first_name, c_last_name] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q3_explain.snap new file mode 100644 index 0000000000..3a311252ae --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q3_explain.snap @@ -0,0 +1,50 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q3" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: dt.d_year ASC NULLS LAST, sum_agg DESC NULLS FIRST, brand_id ASC NULLS LAST, fetch=100 | +| | Projection: dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_net_profit) AS sum_agg | +| | Aggregate: groupBy=[[dt.d_year, item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_net_profit)]] | +| | Projection: dt.d_year, store_sales.ss_net_profit, item.i_brand_id, item.i_brand | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: dt.d_year, store_sales.ss_item_sk, store_sales.ss_net_profit | +| | Inner Join: dt.d_date_sk = store_sales.ss_sold_date_sk | +| | SubqueryAlias: dt | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_moy = Int32(12)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manufact_id = Int32(445)] | +| physical_plan | SortPreservingMergeExec: [d_year@0 ASC NULLS LAST, sum_agg@3 DESC, brand_id@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[d_year@0 ASC NULLS LAST, sum_agg@3 DESC, brand_id@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@2 as brand_id, i_brand@1 as brand, sum(store_sales.ss_net_profit)@3 as sum_agg] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand@1 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, i_brand@1, i_brand_id@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand@3 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[d_year@0, ss_net_profit@2, i_brand_id@4, i_brand@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_year@1, ss_item_sk@3, ss_net_profit@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_moy@8 = 12, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 12 AND 12 <= d_moy_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_brand], predicate=i_manufact_id@13 = 445, pruning_predicate=i_manufact_id_null_count@2 != i_manufact_id_row_count@3 AND i_manufact_id_min@0 <= 445 AND 445 <= i_manufact_id_max@1, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q40_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q40_explain.snap new file mode 100644 index 0000000000..678409ead1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q40_explain.snap @@ -0,0 +1,75 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q40" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: warehouse.w_state ASC NULLS LAST, item.i_item_id ASC NULLS LAST, fetch=100 | +| | Projection: warehouse.w_state, item.i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END) AS sales_before, sum(CASE WHEN date_dim.d_date >= Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END) AS sales_after | +| | Aggregate: groupBy=[[warehouse.w_state, item.i_item_id]], aggr=[[sum(CASE WHEN __common_expr_1 < Date32("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(CAST(catalog_returns.cr_refunded_cash AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) ELSE Decimal128(Some(0),23,2) END) AS sum(CASE WHEN date_dim.d_date < Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 >= Date32("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(CAST(catalog_returns.cr_refunded_cash AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) ELSE Decimal128(Some(0),23,2) END) AS sum(CASE WHEN date_dim.d_date >= Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)]] | +| | Projection: CAST(date_dim.d_date AS Date32) AS __common_expr_1, catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash, warehouse.w_state, item.i_item_id | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash, warehouse.w_state, item.i_item_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash, warehouse.w_state | +| | Inner Join: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_warehouse_sk, catalog_sales.cs_item_sk, catalog_sales.cs_sales_price, catalog_returns.cr_refunded_cash | +| | Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_warehouse_sk, cs_item_sk, cs_order_number, cs_sales_price] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash] | +| | BytesProcessedNode | +| | TableScan: warehouse projection=[w_warehouse_sk, w_state] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id], full_filters=[item.i_current_price >= Decimal128(Some(99),7,2), item.i_current_price <= Decimal128(Some(149),7,2)] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_date >= Date32("2002-04-18"), date_dim.d_date <= Date32("2002-06-17")] | +| physical_plan | SortPreservingMergeExec: [w_state@0 ASC NULLS LAST, i_item_id@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[w_state@0 ASC NULLS LAST, i_item_id@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[w_state@0 as w_state, i_item_id@1 as i_item_id, sum(CASE WHEN date_dim.d_date < Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)@2 as sales_before, sum(CASE WHEN date_dim.d_date >= Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)@3 as sales_after] | +| | AggregateExec: mode=FinalPartitioned, gby=[w_state@0 as w_state, i_item_id@1 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_state@0, i_item_id@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[w_state@3 as w_state, i_item_id@4 as i_item_id], aggr=[sum(CASE WHEN date_dim.d_date < Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END), sum(CASE WHEN date_dim.d_date >= Utf8("2002-05-18") THEN catalog_sales.cs_sales_price - coalesce(catalog_returns.cr_refunded_cash,Int64(0)) ELSE Int64(0) END)] | +| | ProjectionExec: expr=[d_date@4 as __common_expr_1, cs_sales_price@0 as cs_sales_price, cr_refunded_cash@1 as cr_refunded_cash, w_state@2 as w_state, i_item_id@3 as i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_sales_price@1, cr_refunded_cash@2, w_state@3, i_item_id@4, d_date@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@1, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_sales_price@2, cr_refunded_cash@3, w_state@4, i_item_id@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_warehouse_sk@1, w_warehouse_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@2, cs_sales_price@3, cr_refunded_cash@4, w_state@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_warehouse_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_order_number@3, cr_order_number@1), (cs_item_sk@2, cr_item_sk@0)], projection=[cs_sold_date_sk@0, cs_warehouse_sk@1, cs_item_sk@2, cs_sales_price@4, cr_refunded_cash@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_order_number@3, cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_warehouse_sk, cs_item_sk, cs_order_number, cs_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_order_number@1, cr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number, cr_refunded_cash] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/warehouse/warehouse.parquet]]}, projection=[w_warehouse_sk, w_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id], predicate=i_current_price@5 >= Some(99),7,2 AND i_current_price@5 <= Some(149),7,2, pruning_predicate=i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_max@0 >= Some(99),7,2 AND i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_min@3 <= Some(149),7,2, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_date@2 >= 2002-04-18 AND d_date@2 <= 2002-06-17, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2002-04-18 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2002-06-17, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q41_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q41_explain.snap new file mode 100644 index 0000000000..bc81e8f505 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q41_explain.snap @@ -0,0 +1,46 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q41" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: i1.i_product_name ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[i1.i_product_name]], aggr=[[]] | +| | Projection: i1.i_product_name | +| | Filter: CASE WHEN __scalar_sq_1.__always_true IS NULL THEN Int64(0) ELSE __scalar_sq_1.item_cnt END > Int64(0) | +| | Projection: i1.i_product_name, __scalar_sq_1.item_cnt, __scalar_sq_1.__always_true | +| | Left Join: i1.i_manufact = __scalar_sq_1.i_manufact | +| | SubqueryAlias: i1 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_manufact, i_product_name], full_filters=[item.i_manufact_id >= Int32(668), item.i_manufact_id <= Int32(708)] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: count(*) AS item_cnt, item.i_manufact, Boolean(true) AS __always_true | +| | Aggregate: groupBy=[[item.i_manufact]], aggr=[[count(Int64(1)) AS count(*)]] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_manufact], full_filters=[item.i_category = LargeUtf8("Women") AND ((item.i_color = LargeUtf8("cream") OR item.i_color = LargeUtf8("ghost")) AND (item.i_units = LargeUtf8("Ton") OR item.i_units = LargeUtf8("Gross")) AND (item.i_size = LargeUtf8("economy") OR item.i_size = LargeUtf8("small")) OR (item.i_color = LargeUtf8("midnight") OR item.i_color = LargeUtf8("burlywood")) AND (item.i_units = LargeUtf8("Tsp") OR item.i_units = LargeUtf8("Bundle")) AND (item.i_size = LargeUtf8("medium") OR item.i_size = LargeUtf8("extra large"))) OR item.i_category = LargeUtf8("Men") AND (item.i_color = LargeUtf8("lavender") OR item.i_color = LargeUtf8("azure")) AND (item.i_units = LargeUtf8("Each") OR item.i_units = LargeUtf8("Lb")) AND (item.i_size = LargeUtf8("large") OR item.i_size = LargeUtf8("N/A")) OR item.i_category = LargeUtf8("Men") AND (item.i_color = LargeUtf8("chocolate") OR item.i_color = LargeUtf8("steel")) AND (item.i_units = LargeUtf8("N/A") OR item.i_units = LargeUtf8("Dozen")) AND (item.i_size = LargeUtf8("economy") OR item.i_size = LargeUtf8("small")) OR item.i_category = LargeUtf8("Women") AND ((item.i_color = LargeUtf8("floral") OR item.i_color = LargeUtf8("royal")) AND (item.i_units = LargeUtf8("Unknown") OR item.i_units = LargeUtf8("Tbl")) AND (item.i_size = LargeUtf8("economy") OR item.i_size = LargeUtf8("small")) OR (item.i_color = LargeUtf8("navy") OR item.i_color = LargeUtf8("forest")) AND (item.i_units = LargeUtf8("Bunch") OR item.i_units = LargeUtf8("Dram")) AND (item.i_size = LargeUtf8("medium") OR item.i_size = LargeUtf8("extra large"))) OR item.i_category = LargeUtf8("Men") AND (item.i_color = LargeUtf8("cyan") OR item.i_color = LargeUtf8("indian")) AND (item.i_units = LargeUtf8("Carton") OR item.i_units = LargeUtf8("Cup")) AND (item.i_size = LargeUtf8("large") OR item.i_size = LargeUtf8("N/A")) OR item.i_category = LargeUtf8("Men") AND (item.i_color = LargeUtf8("coral") OR item.i_color = LargeUtf8("pale")) AND (item.i_units = LargeUtf8("Pallet") OR item.i_units = LargeUtf8("Gram")) AND (item.i_size = LargeUtf8("economy") OR item.i_size = LargeUtf8("small"))] | +| physical_plan | SortPreservingMergeExec: [i_product_name@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_product_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_product_name@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_product_name@0 as i_product_name], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CASE WHEN __always_true@2 IS NULL THEN 0 ELSE item_cnt@1 END > 0, projection=[i_product_name@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(i_manufact@0, i_manufact@1)], projection=[i_product_name@1, item_cnt@2, __always_true@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_manufact, i_product_name], predicate=i_manufact_id@13 >= 668 AND i_manufact_id@13 <= 708, pruning_predicate=i_manufact_id_null_count@1 != i_manufact_id_row_count@2 AND i_manufact_id_max@0 >= 668 AND i_manufact_id_null_count@1 != i_manufact_id_row_count@2 AND i_manufact_id_min@3 <= 708, required_guarantees=[N] | +| | ProjectionExec: expr=[count(*)@1 as item_cnt, i_manufact@0 as i_manufact, true as __always_true] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_manufact@0 as i_manufact], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_manufact@0 as i_manufact], aggr=[count(*)] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_manufact], predicate=i_category@12 = Women AND ((i_color@17 = cream OR i_color@17 = ghost) AND (i_units@18 = Ton OR i_units@18 = Gross) AND (i_size@15 = economy OR i_size@15 = small) OR (i_color@17 = midnight OR i_color@17 = burlywood) AND (i_units@18 = Tsp OR i_units@18 = Bundle) AND (i_size@15 = medium OR i_size@15 = extra large)) OR i_category@12 = Men AND (i_color@17 = lavender OR i_color@17 = azure) AND (i_units@18 = Each OR i_units@18 = Lb) AND (i_size@15 = large OR i_size@15 = N/A) OR i_category@12 = Men AND (i_color@17 = chocolate OR i_color@17 = steel) AND (i_units@18 = N/A OR i_units@18 = Dozen) AND (i_size@15 = economy OR i_size@15 = small) OR i_category@12 = Women AND ((i_color@17 = floral OR i_color@17 = royal) AND (i_units@18 = Unknown OR i_units@18 = Tbl) AND (i_size@15 = economy OR i_size@15 = small) OR (i_color@17 = navy OR i_color@17 = forest) AND (i_units@18 = Bunch OR i_units@18 = Dram) AND (i_size@15 = medium OR i_size@15 = extra large)) OR i_category@12 = Men AND (i_color@17 = cyan OR i_color@17 = indian) AND (i_units@18 = Carton OR i_units@18 = Cup) AND (i_size@15 = large OR i_size@15 = N/A) OR i_category@12 = Men AND (i_color@17 = coral OR i_color@17 = pale) AND (i_units@18 = Pallet OR i_units@18 = Gram) AND (i_size@15 = economy OR i_size@15 = small), pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Women AND Women <= i_category_max@1 AND ((i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= cream AND cream <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= ghost AND ghost <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Ton AND Ton <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Gross AND Gross <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= economy AND economy <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= small AND small <= i_size_max@13) OR (i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= midnight AND midnight <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= burlywood AND burlywood <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Tsp AND Tsp <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Bundle AND Bundle <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= medium AND medium <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= extra large AND extra large <= i_size_max@13)) OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1 AND (i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= lavender AND lavender <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= azure AND azure <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Each AND Each <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Lb AND Lb <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= large AND large <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= N/A AND N/A <= i_size_max@13) OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1 AND (i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= chocolate AND chocolate <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= steel AND steel <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= N/A AND N/A <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Dozen AND Dozen <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= economy AND economy <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= small AND small <= i_size_max@13) OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Women AND Women <= i_category_max@1 AND ((i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= floral AND floral <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= royal AND royal <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Unknown AND Unknown <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Tbl AND Tbl <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= economy AND economy <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= small AND small <= i_size_max@13) OR (i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= navy AND navy <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= forest AND forest <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Bunch AND Bunch <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Dram AND Dram <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= medium AND medium <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= extra large AND extra large <= i_size_max@13)) OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1 AND (i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= cyan AND cyan <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= indian AND indian <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Carton AND Carton <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Cup AND Cup <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= large AND large <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= N/A AND N/A <= i_size_max@13) OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1 AND (i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= coral AND coral <= i_color_max@5 OR i_color_null_count@6 != i_color_row_count@7 AND i_color_min@4 <= pale AND pale <= i_color_max@5) AND (i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Pallet AND Pallet <= i_units_max@9 OR i_units_null_count@10 != i_units_row_count@11 AND i_units_min@8 <= Gram AND Gram <= i_units_max@9) AND (i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= economy AND economy <= i_size_max@13 OR i_size_null_count@14 != i_size_row_count@15 AND i_size_min@12 <= small AND small <= i_size_max@13), required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q42_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q42_explain.snap new file mode 100644 index 0000000000..e9bfa32958 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q42_explain.snap @@ -0,0 +1,48 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q42" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: sum(store_sales.ss_ext_sales_price) DESC NULLS FIRST, dt.d_year ASC NULLS LAST, item.i_category_id ASC NULLS LAST, item.i_category ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[dt.d_year, item.i_category_id, item.i_category]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: dt.d_year, store_sales.ss_ext_sales_price, item.i_category_id, item.i_category | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: dt.d_year, store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: dt.d_date_sk = store_sales.ss_sold_date_sk | +| | SubqueryAlias: dt | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_moy = Int32(11), date_dim.d_year = Int32(1998)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_category_id, i_category], full_filters=[item.i_manager_id = Int32(1)] | +| physical_plan | SortPreservingMergeExec: [sum(store_sales.ss_ext_sales_price)@3 DESC, d_year@0 ASC NULLS LAST, i_category_id@1 ASC NULLS LAST, i_category@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[sum(store_sales.ss_ext_sales_price)@3 DESC, d_year@0 ASC NULLS LAST, i_category_id@1 ASC NULLS LAST, i_category@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_category_id@1 as i_category_id, i_category@2 as i_category], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, i_category_id@1, i_category@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_category_id@2 as i_category_id, i_category@3 as i_category], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[d_year@0, ss_ext_sales_price@2, i_category_id@4, i_category@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_year@1, ss_item_sk@3, ss_ext_sales_price@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_moy@8 = 11 AND d_year@6 = 1998, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 11 AND 11 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1998 AND 1998 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_category_id, i_category], predicate=i_manager_id@20 = 1, pruning_predicate=i_manager_id_null_count@2 != i_manager_id_row_count@3 AND i_manager_id_min@0 <= 1 AND 1 <= i_manager_id_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q43_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q43_explain.snap new file mode 100644 index 0000000000..b310cf4824 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q43_explain.snap @@ -0,0 +1,49 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q43" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: store.s_store_name ASC NULLS LAST, store.s_store_id ASC NULLS LAST, sun_sales ASC NULLS LAST, mon_sales ASC NULLS LAST, tue_sales ASC NULLS LAST, wed_sales ASC NULLS LAST, thu_sales ASC NULLS LAST, fri_sales ASC NULLS LAST, sat_sales ASC NULLS LAST, fetch=100 | +| | Projection: store.s_store_name, store.s_store_id, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[store.s_store_name, store.s_store_id]], aggr=[[sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Sunday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Monday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Tuesday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Wednesday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Thursday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Friday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Saturday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] | +| | Projection: date_dim.d_day_name, store_sales.ss_sales_price, store.s_store_id, store.s_store_name | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: date_dim.d_day_name, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_day_name], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id, s_store_name], full_filters=[store.s_gmt_offset = Decimal128(Some(-500),5,2)] | +| physical_plan | SortPreservingMergeExec: [s_store_name@0 ASC NULLS LAST, s_store_id@1 ASC NULLS LAST, sun_sales@2 ASC NULLS LAST, mon_sales@3 ASC NULLS LAST, tue_sales@4 ASC NULLS LAST, wed_sales@5 ASC NULLS LAST, thu_sales@6 ASC NULLS LAST, fri_sales@7 ASC NULLS LAST, sat_sales@8 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC NULLS LAST, s_store_id@1 ASC NULLS LAST, sun_sales@2 ASC NULLS LAST, mon_sales@3 ASC NULLS LAST, tue_sales@4 ASC NULLS LAST, wed_sales@5 ASC NULLS LAST, thu_sales@6 ASC NULLS LAST, fri_sales@7 ASC NULLS LAST, sat_sales@8 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_store_name@0 as s_store_name, s_store_id@1 as s_store_id, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END)@2 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END)@3 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END)@4 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END)@5 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END)@6 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END)@7 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)@8 as sat_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_store_name@0 as s_store_name, s_store_id@1 as s_store_id], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_name@0, s_store_id@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_store_name@3 as s_store_name, s_store_id@2 as s_store_id], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[d_day_name@0, ss_sales_price@2, s_store_id@4, s_store_name@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_day_name@1, ss_store_sk@3, ss_sales_price@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_day_name], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id, s_store_name], predicate=s_gmt_offset@27 = Some(-500),5,2, pruning_predicate=s_gmt_offset_null_count@2 != s_gmt_offset_row_count@3 AND s_gmt_offset_min@0 <= Some(-500),5,2 AND Some(-500),5,2 <= s_gmt_offset_max@1, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q44_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q44_explain.snap new file mode 100644 index 0000000000..6f8159032a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q44_explain.snap @@ -0,0 +1,139 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q44" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: asceding.rnk ASC NULLS LAST, fetch=100 | +| | Projection: asceding.rnk, i1.i_product_name AS best_performing, i2.i_product_name AS worst_performing | +| | Inner Join: descending.item_sk = i2.i_item_sk | +| | Projection: asceding.rnk, descending.item_sk, i1.i_product_name | +| | Inner Join: asceding.item_sk = i1.i_item_sk | +| | Projection: asceding.item_sk, asceding.rnk, descending.item_sk | +| | Inner Join: asceding.rnk = descending.rnk | +| | SubqueryAlias: asceding | +| | SubqueryAlias: V11 | +| | Projection: V1.item_sk, rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rnk | +| | Filter: rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW < UInt64(11) | +| | Projection: V1.item_sk, rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: V1 | +| | Projection: ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col | +| | Filter: CAST(avg(ss1.ss_net_profit) AS Decimal128(30, 15)) > CAST(Float64(0.9) * __scalar_sq_1.rank_col AS Decimal128(30, 15)) | +| | Left Join: | +| | Aggregate: groupBy=[[ss1.ss_item_sk]], aggr=[[avg(ss1.ss_net_profit)]] | +| | SubqueryAlias: ss1 | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_item_sk, ss_net_profit], full_filters=[store_sales.ss_store_sk = Int32(6)] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(avg(store_sales.ss_net_profit) AS rank_col AS Float64) | +| | Aggregate: groupBy=[[store_sales.ss_store_sk]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_store_sk, ss_net_profit], full_filters=[store_sales.ss_store_sk = Int32(6), store_sales.ss_hdemo_sk IS NULL] | +| | SubqueryAlias: descending | +| | SubqueryAlias: V21 | +| | Projection: V2.item_sk, rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rnk | +| | Filter: rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW < UInt64(11) | +| | Projection: V2.item_sk, rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: V2 | +| | Projection: ss1.ss_item_sk AS item_sk, avg(ss1.ss_net_profit) AS rank_col | +| | Filter: CAST(avg(ss1.ss_net_profit) AS Decimal128(30, 15)) > CAST(Float64(0.9) * __scalar_sq_2.rank_col AS Decimal128(30, 15)) | +| | Left Join: | +| | Aggregate: groupBy=[[ss1.ss_item_sk]], aggr=[[avg(ss1.ss_net_profit)]] | +| | SubqueryAlias: ss1 | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_item_sk, ss_net_profit], full_filters=[store_sales.ss_store_sk = Int32(6)] | +| | SubqueryAlias: __scalar_sq_2 | +| | Projection: CAST(avg(store_sales.ss_net_profit) AS rank_col AS Float64) | +| | Aggregate: groupBy=[[store_sales.ss_store_sk]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_store_sk, ss_net_profit], full_filters=[store_sales.ss_store_sk = Int32(6), store_sales.ss_hdemo_sk IS NULL] | +| | SubqueryAlias: i1 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_product_name] | +| | SubqueryAlias: i2 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_product_name] | +| physical_plan | SortPreservingMergeExec: [rnk@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[rnk@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[rnk@0 as rnk, i_product_name@1 as best_performing, i_product_name@2 as worst_performing] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_sk@1, i_item_sk@0)], projection=[rnk@0, i_product_name@2, i_product_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_sk@0, i_item_sk@0)], projection=[rnk@1, item_sk@2, i_product_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(rnk@1, rnk@1)], projection=[item_sk@0, rnk@1, item_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([rnk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 as rnk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 < 11 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [V1.rank_col ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,11,6)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortPreservingMergeExec: [rank_col@1 ASC NULLS LAST] | +| | SortExec: expr=[rank_col@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ss_item_sk@0 as item_sk, avg(ss1.ss_net_profit)@1 as rank_col] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CAST(avg(ss1.ss_net_profit)@1 AS Decimal128(30, 15)) > CAST(0.9 * rank_col@2 AS Decimal128(30, 15)), projection=[ss_item_sk@0, avg(ss1.ss_net_profit)@1] | +| | NestedLoopJoinExec: join_type=Left | +| | CoalescePartitionsExec | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_item_sk, ss_net_profit], predicate=ss_store_sk@7 = 6, pruning_predicate=ss_store_sk_null_count@2 != ss_store_sk_row_count@3 AND ss_store_sk_min@0 <= 6 AND 6 <= ss_store_sk_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(avg(store_sales.ss_net_profit)@1 AS Float64) as rank_col] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(store_sales.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_store_sk, ss_net_profit], predicate=ss_store_sk@7 = 6 AND ss_hdemo_sk@5 IS NULL, pruning_predicate=ss_store_sk_null_count@2 != ss_store_sk_row_count@3 AND ss_store_sk_min@0 <= 6 AND 6 <= ss_store_sk_max@1 AND ss_hdemo_sk_null_count@4 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([rnk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 as rnk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 < 11 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ProjectionExec: expr=[item_sk@0 as item_sk, rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [V2.rank_col DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,11,6)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortPreservingMergeExec: [rank_col@1 DESC] | +| | SortExec: expr=[rank_col@1 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ss_item_sk@0 as item_sk, avg(ss1.ss_net_profit)@1 as rank_col] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CAST(avg(ss1.ss_net_profit)@1 AS Decimal128(30, 15)) > CAST(0.9 * rank_col@2 AS Decimal128(30, 15)), projection=[ss_item_sk@0, avg(ss1.ss_net_profit)@1] | +| | NestedLoopJoinExec: join_type=Left | +| | CoalescePartitionsExec | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_item_sk@0 as ss_item_sk], aggr=[avg(ss1.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_item_sk, ss_net_profit], predicate=ss_store_sk@7 = 6, pruning_predicate=ss_store_sk_null_count@2 != ss_store_sk_row_count@3 AND ss_store_sk_min@0 <= 6 AND 6 <= ss_store_sk_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(avg(store_sales.ss_net_profit)@1 AS Float64) as rank_col] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(store_sales.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_store_sk, ss_net_profit], predicate=ss_store_sk@7 = 6 AND ss_hdemo_sk@5 IS NULL, pruning_predicate=ss_store_sk_null_count@2 != ss_store_sk_row_count@3 AND ss_store_sk_min@0 <= 6 AND 6 <= ss_store_sk_max@1 AND ss_hdemo_sk_null_count@4 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_product_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_product_name] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q45_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q45_explain.snap new file mode 100644 index 0000000000..10ee49ed80 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q45_explain.snap @@ -0,0 +1,91 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q45" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer_address.ca_zip ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[customer_address.ca_zip, customer_address.ca_city]], aggr=[[sum(web_sales.ws_sales_price)]] | +| | Projection: web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip | +| | Filter: substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([LargeUtf8("85669"), LargeUtf8("86197"), LargeUtf8("88274"), LargeUtf8("83405"), LargeUtf8("86475"), LargeUtf8("85392"), LargeUtf8("85460"), LargeUtf8("80348"), LargeUtf8("81792")]) OR __correlated_sq_1.mark | +| | Projection: web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip, __correlated_sq_1.mark | +| | LeftMark Join: item.i_item_id = __correlated_sq_1.i_item_id | +| | Projection: web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip, item.i_item_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_sales_price, customer_address.ca_city, customer_address.ca_zip | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_sales_price, customer.c_current_addr_sk | +| | Inner Join: web_sales.ws_bill_customer_sk = customer.c_customer_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_sales_price] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_city, ca_zip] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_qoy = Int32(2), date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_id], full_filters=[item.i_item_sk IN ([Int32(2), Int32(3), Int32(5), Int32(7), Int32(11), Int32(13), Int32(17), Int32(19), Int32(23), Int32(29)])] | +| physical_plan | SortPreservingMergeExec: [ca_zip@0 ASC NULLS LAST, ca_city@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[ca_zip@0 ASC NULLS LAST, ca_city@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip, ca_city@1 as ca_city], aggr=[sum(web_sales.ws_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_zip@0, ca_city@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_zip@2 as ca_zip, ca_city@1 as ca_city], aggr=[sum(web_sales.ws_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: Use substr(ca_zip@2, 1, 5) IN (SET) ([Literal { value: LargeUtf8("85669") }, Literal { value: LargeUtf8("86197") }, Literal { value: LargeUtf8("88274") }, Literal { value: LargeUtf8("83405") }, Literal { value: LargeUtf8("86475") }, Literal { value: LargeUtf8("85392") }, Literal { value: LargeUtf8("85460") }, Literal { value: LargeUtf8("80348") }, Literal { value: LargeUtf8("81792") }]) OR mark@3, projection=[ws_sales_price@0, ca_city@1, ca_zip@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftMark, on=[(i_item_id@3, i_item_id@0)], projection=[ws_sales_price@0, ca_city@1, ca_zip@2, mark@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_sales_price@1, ca_city@2, ca_zip@3, i_item_id@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_sales_price@2, ca_city@3, ca_zip@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@3, ca_address_sk@0)], projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_sales_price@2, ca_city@5, ca_zip@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_customer_sk@2, c_customer_sk@0)], projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_sales_price@3, c_current_addr_sk@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_city, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_qoy@10 = 2 AND d_year@6 = 2000, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 2 AND 2 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_id], predicate=Use i_item_sk@0 IN (SET) ([Literal { value: Int32(2) }, Literal { value: Int32(3) }, Literal { value: Int32(5) }, Literal { value: Int32(7) }, Literal { value: Int32(11) }, Literal { value: Int32(13) }, Literal { value: Int32(17) }, Literal { value: Int32(19) }, Literal { value: Int32(23) }, Literal { value: Int32(29) }]), pruning_predicate=i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 2 AND 2 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 3 AND 3 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 5 AND 5 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 7 AND 7 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 11 AND 11 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 13 AND 13 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 17 AND 17 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 19 AND 19 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 23 AND 23 <= i_item_sk_max@1 OR i_item_sk_null_count@2 != i_item_sk_row_count@3 AND i_item_sk_min@0 <= 29 AND 29 <= i_item_sk_max@1, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q46_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q46_explain.snap new file mode 100644 index 0000000000..27de791f51 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q46_explain.snap @@ -0,0 +1,104 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q46" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, current_addr.ca_city ASC NULLS LAST, dn.bought_city ASC NULLS LAST, dn.ss_ticket_number ASC NULLS LAST, fetch=100 | +| | Projection: customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.amt, dn.profit | +| | Inner Join: customer.c_current_addr_sk = current_addr.ca_address_sk Filter: dn.bought_city != current_addr.ca_city | +| | Projection: dn.ss_ticket_number, dn.bought_city, dn.amt, dn.profit, customer.c_current_addr_sk, customer.c_first_name, customer.c_last_name | +| | Inner Join: dn.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: dn | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city]], aggr=[[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)]] | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit, customer_address.ca_city | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_dow = Int32(6) OR date_dim.d_dow = Int32(0), date_dim.d_year = Int32(1999) OR date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_city IN ([LargeUtf8("Midway"), LargeUtf8("Fairview"), LargeUtf8("Fairview"), LargeUtf8("Midway"), LargeUtf8("Fairview")])] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(3) OR household_demographics.hd_vehicle_count = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | SubqueryAlias: current_addr | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| physical_plan | SortPreservingMergeExec: [c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, ca_city@2 ASC NULLS LAST, bought_city@3 ASC NULLS LAST, ss_ticket_number@4 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, ca_city@2 ASC NULLS LAST, bought_city@3 ASC NULLS LAST, ss_ticket_number@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_last_name@5 as c_last_name, c_first_name@4 as c_first_name, ca_city@6 as ca_city, bought_city@1 as bought_city, ss_ticket_number@0 as ss_ticket_number, amt@2 as amt, profit@3 as profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@4, ca_address_sk@0)], filter=bought_city@0 != ca_city@1, projection=[ss_ticket_number@0, bought_city@1, amt@2, profit@3, c_first_name@5, c_last_name@6, ca_city@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_ticket_number@0, bought_city@2, amt@3, profit@4, c_current_addr_sk@6, c_first_name@7, c_last_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ca_city@3 as bought_city, sum(store_sales.ss_coupon_amt)@4 as amt, sum(store_sales.ss_net_profit)@5 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ss_addr_sk@2 as ss_addr_sk, ca_city@3 as ca_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1, ss_addr_sk@2, ca_city@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_ticket_number@2 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk, ss_addr_sk@1 as ss_addr_sk, ca_city@5 as ca_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], projection=[ss_customer_sk@0, ss_addr_sk@1, ss_ticket_number@2, ss_coupon_amt@3, ss_net_profit@4, ca_city@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_customer_sk@0, ss_addr_sk@2, ss_ticket_number@3, ss_coupon_amt@4, ss_net_profit@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@3, s_store_sk@0)], projection=[ss_customer_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_ticket_number@4, ss_coupon_amt@5, ss_net_profit@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_store_sk@4, ss_ticket_number@5, ss_coupon_amt@6, ss_net_profit@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=(d_dow@7 = 6 OR d_dow@7 = 0) AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001), pruning_predicate=(d_dow_null_count@2 != d_dow_row_count@3 AND d_dow_min@0 <= 6 AND 6 <= d_dow_max@1 OR d_dow_null_count@2 != d_dow_row_count@3 AND d_dow_min@0 <= 0 AND 0 <= d_dow_max@1) AND (d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=Use s_city@22 IN (SET) ([Literal { value: LargeUtf8("Midway") }, Literal { value: LargeUtf8("Fairview") }, Literal { value: LargeUtf8("Fairview") }, Literal { value: LargeUtf8("Midway") }, Literal { value: LargeUtf8("Fairview") }]), pruning_predicate=s_city_null_count@2 != s_city_row_count@3 AND s_city_min@0 <= Midway AND Midway <= s_city_max@1 OR s_city_null_count@2 != s_city_row_count@3 AND s_city_min@0 <= Fairview AND Fairview <= s_city_max@1 OR s_city_null_count@2 != s_city_row_count@3 AND s_city_min@0 <= Fairview AND Fairview <= s_city_max@1 OR s_city_null_count@2 != s_city_row_count@3 AND s_city_min@0 <= Midway AND Midway <= s_city_max@1 OR s_city_null_count@2 != s_city_row_count@3 AND s_city_min@0 <= Fairview AND Fairview <= s_city_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 3 OR hd_vehicle_count@4 = 1, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 3 AND 3 <= hd_dep_count_max@1 OR hd_vehicle_count_null_count@6 != hd_vehicle_count_row_count@7 AND hd_vehicle_count_min@4 <= 1 AND 1 <= hd_vehicle_count_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_city] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_city] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q47_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q47_explain.snap new file mode 100644 index 0000000000..7bbb7633c2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q47_explain.snap @@ -0,0 +1,217 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q47" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: v2.sum_sales - v2.avg_monthly_sales ASC NULLS LAST, v2.nsum ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: v2 | +| | Projection: v1.i_category, v1.i_brand, v1.s_store_name, v1.s_company_name, v1.d_year, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum | +| | Inner Join: v1.i_category = v1_lead.i_category, v1.i_brand = v1_lead.i_brand, v1.s_store_name = v1_lead.s_store_name, v1.s_company_name = v1_lead.s_company_name, CAST(v1.rn AS Decimal128(20, 0)) = CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0)) | +| | Projection: v1.i_category, v1.i_brand, v1.s_store_name, v1.s_company_name, v1.d_year, v1.sum_sales, v1.avg_monthly_sales, v1.rn, v1_lag.sum_sales | +| | Inner Join: v1.i_category = v1_lag.i_category, v1.i_brand = v1_lag.i_brand, v1.s_store_name = v1_lag.s_store_name, v1.s_company_name = v1_lag.s_company_name, CAST(v1.rn AS Decimal128(20, 0)) = CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0)) | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, sum(store_sales.ss_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING | +| | Filter: __common_expr_3 AND CASE WHEN __common_expr_3 THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(None,32,10) END > Decimal128(Some(1000000000),32,10) | +| | Projection: avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(Some(0),21,6) AS __common_expr_3, item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, sum(store_sales.ss_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Filter: date_dim.d_year = Int32(2001) | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, sum(store_sales.ss_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: item.i_brand, item.i_category, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, store.s_store_name, store.s_company_name | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: item.i_brand, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_brand, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: item.i_item_sk = store_sales.ss_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2000) AND date_dim.d_moy = Int32(12) OR date_dim.d_year = Int32(2002) AND date_dim.d_moy = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| | SubqueryAlias: v1_lag | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: item.i_brand, item.i_category, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, store.s_store_name, store.s_company_name | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: item.i_brand, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_brand, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: item.i_item_sk = store_sales.ss_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2000) AND date_dim.d_moy = Int32(12) OR date_dim.d_year = Int32(2002) AND date_dim.d_moy = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| | SubqueryAlias: v1_lead | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, store.s_store_name, store.s_company_name, sum(store_sales.ss_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: item.i_brand, item.i_category, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, store.s_store_name, store.s_company_name | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: item.i_brand, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_brand, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: item.i_item_sk = store_sales.ss_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2000) AND date_dim.d_moy = Int32(12) OR date_dim.d_year = Int32(2002) AND date_dim.d_moy = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| physical_plan | SortPreservingMergeExec: [sum_sales@6 - avg_monthly_sales@5 ASC NULLS LAST, nsum@8 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[sum_sales@6 - avg_monthly_sales@5 ASC NULLS LAST, nsum@8 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, avg_monthly_sales@6 as avg_monthly_sales, sum_sales@5 as sum_sales, sum_sales@7 as psum, sum_sales@8 as nsum] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (s_store_name@2, s_store_name@2), (s_company_name@3, s_company_name@3), (CAST(v1.rn AS Decimal128(20, 0))@9, CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0))@6)], projection=[i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, sum_sales@5, avg_monthly_sales@6, sum_sales@8, sum_sales@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, CAST(v1.rn AS Decimal128(20, 0))@9], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, sum_sales@5 as sum_sales, avg_monthly_sales@6 as avg_monthly_sales, rn@7 as rn, sum_sales@8 as sum_sales, CAST(rn@7 AS Decimal128(20, 0)) as CAST(v1.rn AS Decimal128(20, 0))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (s_store_name@2, s_store_name@2), (s_company_name@3, s_company_name@3), (CAST(v1.rn AS Decimal128(20, 0))@8, CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0))@6)], projection=[i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, sum_sales@5, avg_monthly_sales@6, rn@7, sum_sales@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, CAST(v1.rn AS Decimal128(20, 0))@8], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, sum(store_sales.ss_sales_price)@5 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 AS Decimal128(20, 0)) as CAST(v1.rn AS Decimal128(20, 0))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: __common_expr_3@0 AND CASE WHEN __common_expr_3@0 THEN abs(sum(store_sales.ss_sales_price)@6 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8 END > Some(1000000000),32,10, projection=[i_category@1, i_brand@2, s_store_name@3, s_company_name@4, d_year@5, sum(store_sales.ss_sales_price)@6, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8] | +| | ProjectionExec: expr=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 > Some(0),21,6 as __common_expr_3, i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, sum(store_sales.ss_sales_price)@5 as sum(store_sales.ss_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING] | +| | WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: d_year@4 = 2001 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, sum(store_sales.ss_sales_price)@6 as sum(store_sales.ss_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 as rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Int32(NULL)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@2, s_store_sk@0)], projection=[i_brand@0, i_category@1, ss_sales_price@3, d_year@4, d_moy@5, s_store_name@7, s_company_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@2, d_date_sk@0)], projection=[i_brand@0, i_category@1, ss_store_sk@3, ss_sales_price@4, d_year@6, d_moy@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_category@2, ss_sold_date_sk@3, ss_store_sk@5, ss_sales_price@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2001 OR d_year@6 = 2000 AND d_moy@8 = 12 OR d_year@6 = 2002 AND d_moy@8 = 1, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 1 AND 1 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_company_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0))@6], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, sum(store_sales.ss_sales_price)@6 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 as rn, CAST(CAST(rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 AS Int64) + 1 AS Decimal128(20, 0)) as CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0))] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Int32(NULL)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@2, s_store_sk@0)], projection=[i_brand@0, i_category@1, ss_sales_price@3, d_year@4, d_moy@5, s_store_name@7, s_company_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@2, d_date_sk@0)], projection=[i_brand@0, i_category@1, ss_store_sk@3, ss_sales_price@4, d_year@6, d_moy@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_category@2, ss_sold_date_sk@3, ss_store_sk@5, ss_sales_price@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2001 OR d_year@6 = 2000 AND d_moy@8 = 12 OR d_year@6 = 2002 AND d_moy@8 = 1, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 1 AND 1 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_company_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0))@6], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, sum(store_sales.ss_sales_price)@6 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 as rn, CAST(CAST(rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7 AS Int64) - 1 AS Decimal128(20, 0)) as CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0))] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Int32(NULL)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, s_store_name@2 ASC NULLS LAST, s_company_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_moy@5 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, s_store_name@2 as s_store_name, s_company_name@3 as s_company_name, d_year@4 as d_year, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, s_store_name@2, s_company_name@3, d_year@4, d_moy@5], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@2, s_store_sk@0)], projection=[i_brand@0, i_category@1, ss_sales_price@3, d_year@4, d_moy@5, s_store_name@7, s_company_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@2, d_date_sk@0)], projection=[i_brand@0, i_category@1, ss_store_sk@3, ss_sales_price@4, d_year@6, d_moy@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_category@2, ss_sold_date_sk@3, ss_store_sk@5, ss_sales_price@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2001 OR d_year@6 = 2000 AND d_moy@8 = 12 OR d_year@6 = 2002 AND d_moy@8 = 1, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 1 AND 1 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_company_name] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q48_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q48_explain.snap new file mode 100644 index 0000000000..d968663962 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q48_explain.snap @@ -0,0 +1,69 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q48" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Aggregate: groupBy=[[]], aggr=[[sum(CAST(store_sales.ss_quantity AS Int64))]] | +| | Projection: store_sales.ss_quantity | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_quantity | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk Filter: (customer_address.ca_state = LargeUtf8("IL") OR customer_address.ca_state = LargeUtf8("KY") OR customer_address.ca_state = LargeUtf8("OR")) AND store_sales.ss_net_profit >= Decimal128(Some(0),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(200000),7,2) OR (customer_address.ca_state = LargeUtf8("VA") OR customer_address.ca_state = LargeUtf8("FL") OR customer_address.ca_state = LargeUtf8("AL")) AND store_sales.ss_net_profit >= Decimal128(Some(15000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(300000),7,2) OR (customer_address.ca_state = LargeUtf8("OK") OR customer_address.ca_state = LargeUtf8("IA") OR customer_address.ca_state = LargeUtf8("TX")) AND store_sales.ss_net_profit >= Decimal128(Some(5000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(2500000),7,2) | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk Filter: customer_demographics.cd_marital_status = LargeUtf8("W") AND customer_demographics.cd_education_status = LargeUtf8("2 yr Degree") AND store_sales.ss_sales_price >= Decimal128(Some(10000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(15000),7,2) OR customer_demographics.cd_marital_status = LargeUtf8("S") AND customer_demographics.cd_education_status = LargeUtf8("Advanced Degree") AND store_sales.ss_sales_price >= Decimal128(Some(5000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(10000),7,2) OR customer_demographics.cd_marital_status = LargeUtf8("D") AND customer_demographics.cd_education_status = LargeUtf8("Primary") AND store_sales.ss_sales_price >= Decimal128(Some(15000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(20000),7,2) | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_cdemo_sk, store_sales.ss_addr_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_cdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_net_profit], full_filters=[store_sales.ss_net_profit >= Decimal128(Some(0),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(200000),7,2) OR store_sales.ss_net_profit >= Decimal128(Some(15000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(300000),7,2) OR store_sales.ss_net_profit >= Decimal128(Some(5000),7,2) AND store_sales.ss_net_profit <= Decimal128(Some(2500000),7,2), store_sales.ss_sales_price >= Decimal128(Some(10000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(15000),7,2) OR store_sales.ss_sales_price >= Decimal128(Some(5000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(10000),7,2) OR store_sales.ss_sales_price >= Decimal128(Some(15000),7,2) AND store_sales.ss_sales_price <= Decimal128(Some(20000),7,2)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], full_filters=[customer_demographics.cd_marital_status = LargeUtf8("W") AND customer_demographics.cd_education_status = LargeUtf8("2 yr Degree") OR customer_demographics.cd_marital_status = LargeUtf8("S") AND customer_demographics.cd_education_status = LargeUtf8("Advanced Degree") OR customer_demographics.cd_marital_status = LargeUtf8("D") AND customer_demographics.cd_education_status = LargeUtf8("Primary")] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state], full_filters=[customer_address.ca_country = LargeUtf8("United States"), customer_address.ca_state IN ([LargeUtf8("IL"), LargeUtf8("KY"), LargeUtf8("OR"), LargeUtf8("VA"), LargeUtf8("FL"), LargeUtf8("AL"), LargeUtf8("OK"), LargeUtf8("IA"), LargeUtf8("TX")]), customer_address.ca_state IN ([LargeUtf8("IL"), LargeUtf8("KY"), LargeUtf8("OR"), LargeUtf8("VA"), LargeUtf8("FL"), LargeUtf8("AL"), LargeUtf8("OK"), LargeUtf8("IA"), LargeUtf8("TX")])] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001)] | +| physical_plan | AggregateExec: mode=Final, gby=[], aggr=[sum(store_sales.ss_quantity)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(store_sales.ss_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_quantity@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], filter=(ca_state@1 = IL OR ca_state@1 = KY OR ca_state@1 = OR) AND ss_net_profit@0 >= Some(0),7,2 AND ss_net_profit@0 <= Some(200000),7,2 OR (ca_state@1 = VA OR ca_state@1 = FL OR ca_state@1 = AL) AND ss_net_profit@0 >= Some(15000),7,2 AND ss_net_profit@0 <= Some(300000),7,2 OR (ca_state@1 = OK OR ca_state@1 = IA OR ca_state@1 = TX) AND ss_net_profit@0 >= Some(5000),7,2 AND ss_net_profit@0 <= Some(2500000),7,2, projection=[ss_sold_date_sk@0, ss_quantity@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_cdemo_sk@1, cd_demo_sk@0)], filter=cd_marital_status@1 = W AND cd_education_status@2 = 2 yr Degree AND ss_sales_price@0 >= Some(10000),7,2 AND ss_sales_price@0 <= Some(15000),7,2 OR cd_marital_status@1 = S AND cd_education_status@2 = Advanced Degree AND ss_sales_price@0 >= Some(5000),7,2 AND ss_sales_price@0 <= Some(10000),7,2 OR cd_marital_status@1 = D AND cd_education_status@2 = Primary AND ss_sales_price@0 >= Some(15000),7,2 AND ss_sales_price@0 <= Some(20000),7,2, projection=[ss_sold_date_sk@0, ss_addr_sk@2, ss_quantity@3, ss_net_profit@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@3, s_store_sk@0)], projection=[ss_sold_date_sk@0, ss_cdemo_sk@1, ss_addr_sk@2, ss_quantity@4, ss_sales_price@5, ss_net_profit@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_cdemo_sk, ss_addr_sk, ss_store_sk, ss_quantity, ss_sales_price, ss_net_profit], predicate=(ss_net_profit@22 >= Some(0),7,2 AND ss_net_profit@22 <= Some(200000),7,2 OR ss_net_profit@22 >= Some(15000),7,2 AND ss_net_profit@22 <= Some(300000),7,2 OR ss_net_profit@22 >= Some(5000),7,2 AND ss_net_profit@22 <= Some(2500000),7,2) AND (ss_sales_price@13 >= Some(10000),7,2 AND ss_sales_price@13 <= Some(15000),7,2 OR ss_sales_price@13 >= Some(5000),7,2 AND ss_sales_price@13 <= Some(10000),7,2 OR ss_sales_price@13 >= Some(15000),7,2 AND ss_sales_price@13 <= Some(20000),7,2), pruning_predicate=(ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_max@0 >= Some(0),7,2 AND ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_min@3 <= Some(200000),7,2 OR ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_max@0 >= Some(15000),7,2 AND ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_min@3 <= Some(300000),7,2 OR ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_max@0 >= Some(5000),7,2 AND ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_min@3 <= Some(2500000),7,2) AND (ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_max@4 >= Some(10000),7,2 AND ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_min@7 <= Some(15000),7,2 OR ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_max@4 >= Some(5000),7,2 AND ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_min@7 <= Some(10000),7,2 OR ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_max@4 >= Some(15000),7,2 AND ss_sales_price_null_count@5 != ss_sales_price_row_count@6 AND ss_sales_price_min@7 <= Some(20000),7,2), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], predicate=cd_marital_status@2 = W AND cd_education_status@3 = 2 yr Degree OR cd_marital_status@2 = S AND cd_education_status@3 = Advanced Degree OR cd_marital_status@2 = D AND cd_education_status@3 = Primary, pruning_predicate=cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= W AND W <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= 2 yr Degree AND 2 yr Degree <= cd_education_status_max@5 OR cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= S AND S <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Advanced Degree AND Advanced Degree <= cd_education_status_max@5 OR cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= D AND D <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Primary AND Primary <= cd_education_status_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state], predicate=ca_country@10 = United States AND Use ca_state@8 IN (SET) ([Literal { value: LargeUtf8("IL") }, Literal { value: LargeUtf8("KY") }, Literal { value: LargeUtf8("OR") }, Literal { value: LargeUtf8("VA") }, Literal { value: LargeUtf8("FL") }, Literal { value: LargeUtf8("AL") }, Literal { value: LargeUtf8("OK") }, Literal { value: LargeUtf8("IA") }, Literal { value: LargeUtf8("TX") }]) AND Use ca_state@8 IN (SET) ([Literal { value: LargeUtf8("IL") }, Literal { value: LargeUtf8("KY") }, Literal { value: LargeUtf8("OR") }, Literal { value: LargeUtf8("VA") }, Literal { value: LargeUtf8("FL") }, Literal { value: LargeUtf8("AL") }, Literal { value: LargeUtf8("OK") }, Literal { value: LargeUtf8("IA") }, Literal { value: LargeUtf8("TX") }]), pruning_predicate=ca_country_null_count@2 != ca_country_row_count@3 AND ca_country_min@0 <= United States AND United States <= ca_country_max@1 AND (ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= IL AND IL <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= KY AND KY <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= OR AND OR <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= VA AND VA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= FL AND FL <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= AL AND AL <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= OK AND OK <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= IA AND IA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= TX AND TX <= ca_state_max@5) AND (ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= IL AND IL <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= KY AND KY <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= OR AND OR <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= VA AND VA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= FL AND FL <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= AL AND AL <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= OK AND OK <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= IA AND IA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= TX AND TX <= ca_state_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q49_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q49_explain.snap new file mode 100644 index 0000000000..2d55dcb4a8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q49_explain.snap @@ -0,0 +1,200 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q49" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: channel ASC NULLS LAST, web.return_rank ASC NULLS LAST, web.currency_rank ASC NULLS LAST, web.item ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[channel, web.item, web.return_ratio, web.return_rank, web.currency_rank]], aggr=[[]] | +| | Union | +| | Projection: Utf8("web") AS channel, web.item, web.return_ratio, web.return_rank, web.currency_rank | +| | SubqueryAlias: web | +| | Projection: in_web.item, in_web.return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank | +| | Filter: rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) OR rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) | +| | Projection: in_web.item, in_web.return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: in_web | +| | Projection: ws.ws_item_sk AS item, CAST(sum(coalesce(wr.wr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(wr.wr_return_amt,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio | +| | Aggregate: groupBy=[[ws.ws_item_sk]], aggr=[[sum(coalesce(CAST(wr.wr_return_quantity AS Int64), Int64(0))), sum(coalesce(CAST(ws.ws_quantity AS Int64), Int64(0))), sum(coalesce(CAST(wr.wr_return_amt AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(wr.wr_return_amt,Int64(0))), sum(coalesce(CAST(ws.ws_net_paid AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(ws.ws_net_paid,Int64(0)))]] | +| | Projection: ws.ws_item_sk, ws.ws_quantity, ws.ws_net_paid, wr.wr_return_quantity, wr.wr_return_amt | +| | Inner Join: ws.ws_sold_date_sk = date_dim.d_date_sk | +| | Filter: wr.wr_return_amt > Decimal128(Some(1000000),7,2) | +| | Projection: ws.ws_sold_date_sk, ws.ws_item_sk, ws.ws_quantity, ws.ws_net_paid, wr.wr_return_quantity, wr.wr_return_amt | +| | Left Join: ws.ws_order_number = wr.wr_order_number, ws.ws_item_sk = wr.wr_item_sk | +| | SubqueryAlias: ws | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_net_paid], full_filters=[web_sales.ws_net_profit > Decimal128(Some(100),7,2), web_sales.ws_net_paid > Decimal128(Some(0),7,2), web_sales.ws_quantity > Int32(0)] | +| | SubqueryAlias: wr | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000), date_dim.d_moy = Int32(12)] | +| | Projection: Utf8("catalog") AS channel, catalog.item, catalog.return_ratio, catalog.return_rank, catalog.currency_rank | +| | SubqueryAlias: catalog | +| | Projection: in_cat.item, in_cat.return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank | +| | Filter: rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) OR rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) | +| | Projection: in_cat.item, in_cat.return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: in_cat | +| | Projection: cs.cs_item_sk AS item, CAST(sum(coalesce(cr.cr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(cr.cr_return_amount,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio | +| | Aggregate: groupBy=[[cs.cs_item_sk]], aggr=[[sum(coalesce(CAST(cr.cr_return_quantity AS Int64), Int64(0))), sum(coalesce(CAST(cs.cs_quantity AS Int64), Int64(0))), sum(coalesce(CAST(cr.cr_return_amount AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(cr.cr_return_amount,Int64(0))), sum(coalesce(CAST(cs.cs_net_paid AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(cs.cs_net_paid,Int64(0)))]] | +| | Projection: cs.cs_item_sk, cs.cs_quantity, cs.cs_net_paid, cr.cr_return_quantity, cr.cr_return_amount | +| | Inner Join: cs.cs_sold_date_sk = date_dim.d_date_sk | +| | Filter: cr.cr_return_amount > Decimal128(Some(1000000),7,2) | +| | Projection: cs.cs_sold_date_sk, cs.cs_item_sk, cs.cs_quantity, cs.cs_net_paid, cr.cr_return_quantity, cr.cr_return_amount | +| | Left Join: cs.cs_order_number = cr.cr_order_number, cs.cs_item_sk = cr.cr_item_sk | +| | SubqueryAlias: cs | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_net_paid], full_filters=[catalog_sales.cs_net_profit > Decimal128(Some(100),7,2), catalog_sales.cs_net_paid > Decimal128(Some(0),7,2), catalog_sales.cs_quantity > Int32(0)] | +| | SubqueryAlias: cr | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000), date_dim.d_moy = Int32(12)] | +| | Projection: Utf8("store") AS channel, store.item, store.return_ratio, store.return_rank, store.currency_rank | +| | SubqueryAlias: store | +| | Projection: in_store.item, in_store.return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS return_rank, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS currency_rank | +| | Filter: rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) OR rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(10) | +| | Projection: in_store.item, in_store.return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | WindowAggr: windowExpr=[[rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: in_store | +| | Projection: sts.ss_item_sk AS item, CAST(sum(coalesce(sr.sr_return_quantity,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_quantity,Int64(0))) AS Decimal128(15, 4)) AS return_ratio, CAST(sum(coalesce(sr.sr_return_amt,Int64(0))) AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_net_paid,Int64(0))) AS Decimal128(15, 4)) AS currency_ratio | +| | Aggregate: groupBy=[[sts.ss_item_sk]], aggr=[[sum(coalesce(CAST(sr.sr_return_quantity AS Int64), Int64(0))), sum(coalesce(CAST(sts.ss_quantity AS Int64), Int64(0))), sum(coalesce(CAST(sr.sr_return_amt AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(sr.sr_return_amt,Int64(0))), sum(coalesce(CAST(sts.ss_net_paid AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(sts.ss_net_paid,Int64(0)))]] | +| | Projection: sts.ss_item_sk, sts.ss_quantity, sts.ss_net_paid, sr.sr_return_quantity, sr.sr_return_amt | +| | Inner Join: sts.ss_sold_date_sk = date_dim.d_date_sk | +| | Filter: sr.sr_return_amt > Decimal128(Some(1000000),7,2) | +| | Projection: sts.ss_sold_date_sk, sts.ss_item_sk, sts.ss_quantity, sts.ss_net_paid, sr.sr_return_quantity, sr.sr_return_amt | +| | Left Join: sts.ss_ticket_number = sr.sr_ticket_number, sts.ss_item_sk = sr.sr_item_sk | +| | SubqueryAlias: sts | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_net_paid], full_filters=[store_sales.ss_net_profit > Decimal128(Some(100),7,2), store_sales.ss_net_paid > Decimal128(Some(0),7,2), store_sales.ss_quantity > Int32(0)] | +| | SubqueryAlias: sr | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2000), date_dim.d_moy = Int32(12)] | +| physical_plan | SortPreservingMergeExec: [channel@0 ASC NULLS LAST, return_rank@3 ASC NULLS LAST, currency_rank@4 ASC NULLS LAST, item@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[channel@0 ASC NULLS LAST, return_rank@3 ASC NULLS LAST, currency_rank@4 ASC NULLS LAST, item@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, item@1 as item, return_ratio@2 as return_ratio, return_rank@3 as return_rank, currency_rank@4 as currency_rank], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([channel@0, item@1, return_ratio@2, return_rank@3, currency_rank@4], 24), input_partitions=72 | +| | AggregateExec: mode=Partial, gby=[channel@0 as channel, item@1 as item, return_ratio@2 as return_ratio, return_rank@3 as return_rank, currency_rank@4 as currency_rank], aggr=[], ordering_mode=PartiallySorted([0, 4]) | +| | UnionExec | +| | ProjectionExec: expr=[web as channel, item@0 as item, return_ratio@1 as return_ratio, return_rank@2 as return_rank, currency_rank@3 as currency_rank] | +| | ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as return_rank, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as currency_rank] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 <= 10 OR rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 <= 10 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [in_web.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,23,8)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[currency_ratio@2 ASC NULLS LAST], preserve_partitioning=[false] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [in_web.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,23,8)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortPreservingMergeExec: [return_ratio@1 ASC NULLS LAST] | +| | SortExec: expr=[return_ratio@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ws_item_sk@0 as item, CAST(sum(coalesce(wr.wr_return_quantity,Int64(0)))@1 AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_quantity,Int64(0)))@2 AS Decimal128(15, 4)) as return_ratio, CAST(sum(coalesce(wr.wr_return_amt,Int64(0)))@3 AS Decimal128(15, 4)) / CAST(sum(coalesce(ws.ws_net_paid,Int64(0)))@4 AS Decimal128(15, 4)) as currency_ratio] | +| | AggregateExec: mode=FinalPartitioned, gby=[ws_item_sk@0 as ws_item_sk], aggr=[sum(coalesce(wr.wr_return_quantity,Int64(0))), sum(coalesce(ws.ws_quantity,Int64(0))), sum(coalesce(wr.wr_return_amt,Int64(0))), sum(coalesce(ws.ws_net_paid,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ws_item_sk@0 as ws_item_sk], aggr=[sum(coalesce(wr.wr_return_quantity,Int64(0))), sum(coalesce(ws.ws_quantity,Int64(0))), sum(coalesce(wr.wr_return_amt,Int64(0))), sum(coalesce(ws.ws_net_paid,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_quantity@2, ws_net_paid@3, wr_return_quantity@4, wr_return_amt@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: wr_return_amt@5 > Some(1000000),7,2 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ws_order_number@2, wr_order_number@1), (ws_item_sk@1, wr_item_sk@0)], projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_quantity@3, ws_net_paid@4, wr_return_quantity@7, wr_return_amt@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@2, ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_net_paid], predicate=ws_net_profit@33 > Some(100),7,2 AND ws_net_paid@29 > Some(0),7,2 AND ws_quantity@18 > 0, pruning_predicate=ws_net_profit_null_count@1 != ws_net_profit_row_count@2 AND ws_net_profit_max@0 > Some(100),7,2 AND ws_net_paid_null_count@4 != ws_net_paid_row_count@5 AND ws_net_paid_max@3 > Some(0),7,2 AND ws_quantity_null_count@7 != ws_quantity_row_count@8 AND ws_quantity_max@6 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_order_number@1, wr_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000 AND d_moy@8 = 12, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5, required_guarantees=[N] | +| | ProjectionExec: expr=[catalog as channel, item@0 as item, return_ratio@1 as return_ratio, return_rank@2 as return_rank, currency_rank@3 as currency_rank] | +| | ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as return_rank, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as currency_rank] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 <= 10 OR rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 <= 10 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [in_cat.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,23,8)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[currency_ratio@2 ASC NULLS LAST], preserve_partitioning=[false] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [in_cat.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,23,8)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortPreservingMergeExec: [return_ratio@1 ASC NULLS LAST] | +| | SortExec: expr=[return_ratio@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[cs_item_sk@0 as item, CAST(sum(coalesce(cr.cr_return_quantity,Int64(0)))@1 AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_quantity,Int64(0)))@2 AS Decimal128(15, 4)) as return_ratio, CAST(sum(coalesce(cr.cr_return_amount,Int64(0)))@3 AS Decimal128(15, 4)) / CAST(sum(coalesce(cs.cs_net_paid,Int64(0)))@4 AS Decimal128(15, 4)) as currency_ratio] | +| | AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(coalesce(cr.cr_return_quantity,Int64(0))), sum(coalesce(cs.cs_quantity,Int64(0))), sum(coalesce(cr.cr_return_amount,Int64(0))), sum(coalesce(cs.cs_net_paid,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(coalesce(cr.cr_return_quantity,Int64(0))), sum(coalesce(cs.cs_quantity,Int64(0))), sum(coalesce(cr.cr_return_amount,Int64(0))), sum(coalesce(cs.cs_net_paid,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_item_sk@1, cs_quantity@2, cs_net_paid@3, cr_return_quantity@4, cr_return_amount@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: cr_return_amount@5 > Some(1000000),7,2 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_order_number@2, cr_order_number@1), (cs_item_sk@1, cr_item_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@1, cs_quantity@3, cs_net_paid@4, cr_return_quantity@7, cr_return_amount@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_order_number@2, cs_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_net_paid], predicate=cs_net_profit@33 > Some(100),7,2 AND cs_net_paid@29 > Some(0),7,2 AND cs_quantity@18 > 0, pruning_predicate=cs_net_profit_null_count@1 != cs_net_profit_row_count@2 AND cs_net_profit_max@0 > Some(100),7,2 AND cs_net_paid_null_count@4 != cs_net_paid_row_count@5 AND cs_net_paid_max@3 > Some(0),7,2 AND cs_quantity_null_count@7 != cs_quantity_row_count@8 AND cs_quantity_max@6 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_order_number@1, cr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000 AND d_moy@8 = 12, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5, required_guarantees=[N] | +| | ProjectionExec: expr=[store as channel, item@0 as item, return_ratio@1 as return_ratio, return_rank@2 as return_rank, currency_rank@3 as currency_rank] | +| | ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as return_rank, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as currency_rank] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 <= 10 OR rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 <= 10 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | ProjectionExec: expr=[item@0 as item, return_ratio@1 as return_ratio, rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [in_store.currency_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,23,8)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[currency_ratio@2 ASC NULLS LAST], preserve_partitioning=[false] | +| | BoundedWindowAggExec: wdw=[rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() ORDER BY [in_store.return_ratio ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,23,8)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortPreservingMergeExec: [return_ratio@1 ASC NULLS LAST] | +| | SortExec: expr=[return_ratio@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ss_item_sk@0 as item, CAST(sum(coalesce(sr.sr_return_quantity,Int64(0)))@1 AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_quantity,Int64(0)))@2 AS Decimal128(15, 4)) as return_ratio, CAST(sum(coalesce(sr.sr_return_amt,Int64(0)))@3 AS Decimal128(15, 4)) / CAST(sum(coalesce(sts.ss_net_paid,Int64(0)))@4 AS Decimal128(15, 4)) as currency_ratio] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk], aggr=[sum(coalesce(sr.sr_return_quantity,Int64(0))), sum(coalesce(sts.ss_quantity,Int64(0))), sum(coalesce(sr.sr_return_amt,Int64(0))), sum(coalesce(sts.ss_net_paid,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_item_sk@0 as ss_item_sk], aggr=[sum(coalesce(sr.sr_return_quantity,Int64(0))), sum(coalesce(sts.ss_quantity,Int64(0))), sum(coalesce(sr.sr_return_amt,Int64(0))), sum(coalesce(sts.ss_net_paid,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_quantity@2, ss_net_paid@3, sr_return_quantity@4, sr_return_amt@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sr_return_amt@5 > Some(1000000),7,2 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_ticket_number@2, sr_ticket_number@1), (ss_item_sk@1, sr_item_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_quantity@3, ss_net_paid@4, sr_return_quantity@7, sr_return_amt@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@2, ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_net_paid], predicate=ss_net_profit@22 > Some(100),7,2 AND ss_net_paid@20 > Some(0),7,2 AND ss_quantity@10 > 0, pruning_predicate=ss_net_profit_null_count@1 != ss_net_profit_row_count@2 AND ss_net_profit_max@0 > Some(100),7,2 AND ss_net_paid_null_count@4 != ss_net_paid_row_count@5 AND ss_net_paid_max@3 > Some(0),7,2 AND ss_quantity_null_count@7 != ss_quantity_row_count@8 AND ss_quantity_max@6 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_ticket_number@1, sr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2000 AND d_moy@8 = 12, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q4_explain.snap new file mode 100644 index 0000000000..1078637ebe --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q4_explain.snap @@ -0,0 +1,778 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q4" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: t_s_secyear.customer_id ASC NULLS LAST, t_s_secyear.customer_first_name ASC NULLS LAST, t_s_secyear.customer_last_name ASC NULLS LAST, t_s_secyear.customer_email_address ASC NULLS LAST, fetch=100 | +| | Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address | +| | Inner Join: t_s_firstyear.customer_id = t_w_secyear.customer_id Filter: CASE WHEN t_c_firstyear.year_total > Decimal128(Some(0),24,6) THEN t_c_secyear.year_total / t_c_firstyear.year_total ELSE Decimal128(None,34,10) END > CASE WHEN t_w_firstyear.year_total > Decimal128(Some(0),24,6) THEN t_w_secyear.year_total / t_w_firstyear.year_total ELSE Decimal128(None,34,10) END | +| | Projection: t_s_firstyear.customer_id, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address, t_c_firstyear.year_total, t_c_secyear.year_total, t_w_firstyear.year_total | +| | Inner Join: t_s_firstyear.customer_id = t_w_firstyear.customer_id | +| | Projection: t_s_firstyear.customer_id, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address, t_c_firstyear.year_total, t_c_secyear.year_total | +| | Inner Join: t_s_firstyear.customer_id = t_c_secyear.customer_id Filter: CASE WHEN t_c_firstyear.year_total > Decimal128(Some(0),24,6) THEN t_c_secyear.year_total / t_c_firstyear.year_total ELSE Decimal128(None,34,10) END > CASE WHEN t_s_firstyear.year_total > Decimal128(Some(0),24,6) THEN t_s_secyear.year_total / t_s_firstyear.year_total ELSE Decimal128(None,34,10) END | +| | Projection: t_s_firstyear.customer_id, t_s_firstyear.year_total, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.customer_email_address, t_s_secyear.year_total, t_c_firstyear.year_total | +| | Inner Join: t_s_firstyear.customer_id = t_c_firstyear.customer_id | +| | Inner Join: t_s_firstyear.customer_id = t_s_secyear.customer_id | +| | SubqueryAlias: t_s_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | Projection: customer.c_customer_id AS customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price | +| | Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | SubqueryAlias: t_s_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price | +| | Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, customer.c_email_address AS customer_email_address, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | SubqueryAlias: t_c_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | Projection: customer.c_customer_id AS customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price | +| | Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | SubqueryAlias: t_c_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price | +| | Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | SubqueryAlias: t_w_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | Projection: customer.c_customer_id AS customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price | +| | Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total | +| | Filter: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) > Decimal128(Some(0),24,6) | +| | Projection: customer.c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | SubqueryAlias: t_w_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, store_sales.ss_sold_date_sk, store_sales.ss_ext_discount_amt, store_sales.ss_ext_sales_price, store_sales.ss_ext_wholesale_cost, store_sales.ss_ext_list_price | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_discount_amt, catalog_sales.cs_ext_sales_price, catalog_sales.cs_ext_wholesale_cost, catalog_sales.cs_ext_list_price | +| | Inner Join: customer.c_customer_sk = catalog_sales.cs_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2)) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, date_dim.d_year]], aggr=[[sum((web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price) / Decimal128(Some(2),20,0)) AS sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer.c_preferred_cust_flag, customer.c_birth_country, customer.c_login, customer.c_email_address, web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, web_sales.ws_ext_sales_price, web_sales.ws_ext_wholesale_cost, web_sales.ws_ext_list_price | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| physical_plan | SortPreservingMergeExec: [customer_id@0 ASC NULLS LAST, customer_first_name@1 ASC NULLS LAST, customer_last_name@2 ASC NULLS LAST, customer_email_address@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[customer_id@0 ASC NULLS LAST, customer_first_name@1 ASC NULLS LAST, customer_last_name@2 ASC NULLS LAST, customer_email_address@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@0 > Some(0),24,6 THEN year_total@1 / year_total@0 END > CASE WHEN year_total@2 > Some(0),24,6 THEN year_total@3 / year_total@2 END, projection=[customer_id@1, customer_first_name@2, customer_last_name@3, customer_email_address@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@0, customer_id@1, customer_first_name@2, customer_last_name@3, customer_email_address@4, year_total@5, year_total@6, year_total@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@2 > Some(0),24,6 THEN year_total@3 / year_total@2 END > CASE WHEN year_total@0 > Some(0),24,6 THEN year_total@1 / year_total@0 END, projection=[customer_id@0, customer_id@2, customer_first_name@3, customer_last_name@4, customer_email_address@5, year_total@7, year_total@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@0, year_total@1, customer_id@2, customer_first_name@3, customer_last_name@4, customer_email_address@5, year_total@6, year_total@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=72 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_sales_price@9, ss_ext_wholesale_cost@10, ss_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, cs_ext_discount_amt@8, cs_ext_sales_price@9, cs_ext_wholesale_cost@10, cs_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_sales_price@9, ws_ext_wholesale_cost@10, ws_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=72 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, c_email_address@6 as customer_email_address, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_sales_price@9, ss_ext_wholesale_cost@10, ss_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, c_email_address@6 as customer_email_address, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, cs_ext_discount_amt@8, cs_ext_sales_price@9, cs_ext_wholesale_cost@10, cs_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, c_email_address@6 as customer_email_address, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_sales_price@9, ws_ext_wholesale_cost@10, ws_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=72 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_sales_price@9, ss_ext_wholesale_cost@10, ss_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, cs_ext_discount_amt@8, cs_ext_sales_price@9, cs_ext_wholesale_cost@10, cs_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_sales_price@9, ws_ext_wholesale_cost@10, ws_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=72 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_sales_price@9, ss_ext_wholesale_cost@10, ss_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, cs_ext_discount_amt@8, cs_ext_sales_price@9, cs_ext_wholesale_cost@10, cs_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_sales_price@9, ws_ext_wholesale_cost@10, ws_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=72 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_sales_price@9, ss_ext_wholesale_cost@10, ss_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, cs_ext_discount_amt@8, cs_ext_sales_price@9, cs_ext_wholesale_cost@10, cs_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@1 > Some(0),24,6 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_sales_price@9, ws_ext_wholesale_cost@10, ws_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=72 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(store_sales.ss_ext_list_price - store_sales.ss_ext_wholesale_cost - store_sales.ss_ext_discount_amt + store_sales.ss_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ss_ext_discount_amt@8, ss_ext_sales_price@9, ss_ext_wholesale_cost@10, ss_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ss_sold_date_sk@8, ss_ext_discount_amt@10, ss_ext_sales_price@11, ss_ext_wholesale_cost@12, ss_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(catalog_sales.cs_ext_list_price - catalog_sales.cs_ext_wholesale_cost - catalog_sales.cs_ext_discount_amt + catalog_sales.cs_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, cs_ext_discount_amt@8, cs_ext_sales_price@9, cs_ext_wholesale_cost@10, cs_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, cs_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, cs_sold_date_sk@8, cs_ext_discount_amt@10, cs_ext_sales_price@11, cs_ext_wholesale_cost@12, cs_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))@8 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@7 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, d_year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, c_preferred_cust_flag@3 as c_preferred_cust_flag, c_birth_country@4 as c_birth_country, c_login@5 as c_login, c_email_address@6 as c_email_address, d_year@11 as d_year], aggr=[sum(web_sales.ws_ext_list_price - web_sales.ws_ext_wholesale_cost - web_sales.ws_ext_discount_amt + web_sales.ws_ext_sales_price / Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@7, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, c_preferred_cust_flag@3, c_birth_country@4, c_login@5, c_email_address@6, ws_ext_discount_amt@8, ws_ext_sales_price@9, ws_ext_wholesale_cost@10, ws_ext_list_price@11, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, c_preferred_cust_flag@4, c_birth_country@5, c_login@6, c_email_address@7, ws_sold_date_sk@8, ws_ext_discount_amt@10, ws_ext_sales_price@11, ws_ext_wholesale_cost@12, ws_ext_list_price@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name, c_preferred_cust_flag, c_birth_country, c_login, c_email_address], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_ext_discount_amt, ws_ext_sales_price, ws_ext_wholesale_cost, ws_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q50_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q50_explain.snap new file mode 100644 index 0000000000..36fdbcfe15 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q50_explain.snap @@ -0,0 +1,77 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q50" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: store.s_store_name ASC NULLS LAST, store.s_company_id ASC NULLS LAST, store.s_street_number ASC NULLS LAST, store.s_street_name ASC NULLS LAST, store.s_street_type ASC NULLS LAST, store.s_suite_number ASC NULLS LAST, store.s_city ASC NULLS LAST, store.s_county ASC NULLS LAST, store.s_state ASC NULLS LAST, store.s_zip ASC NULLS LAST, fetch=100 | +| | Projection: store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days | +| | Aggregate: groupBy=[[store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip]], aggr=[[sum(CASE WHEN __common_expr_1 <= Int32(30) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(30) AND __common_expr_1 <= Int32(60) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(60) AND __common_expr_1 <= Int32(90) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(90) AND __common_expr_1 <= Int32(120) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(120) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] | +| | Projection: store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk AS __common_expr_1, store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip | +| | Inner Join: store_returns.sr_returned_date_sk = d2.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_returns.sr_returned_date_sk, store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_returns.sr_returned_date_sk, store.s_store_name, store.s_company_id, store.s_street_number, store.s_street_name, store.s_street_type, store.s_suite_number, store.s_city, store.s_county, store.s_state, store.s_zip | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_returns.sr_returned_date_sk | +| | Inner Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_customer_sk = store_returns.sr_customer_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_id, s_street_number, s_street_name, s_street_type, s_suite_number, s_city, s_county, s_state, s_zip] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk] | +| | SubqueryAlias: d2 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy = Int32(8)] | +| physical_plan | SortPreservingMergeExec: [s_store_name@0 ASC NULLS LAST, s_company_id@1 ASC NULLS LAST, s_street_number@2 ASC NULLS LAST, s_street_name@3 ASC NULLS LAST, s_street_type@4 ASC NULLS LAST, s_suite_number@5 ASC NULLS LAST, s_city@6 ASC NULLS LAST, s_county@7 ASC NULLS LAST, s_state@8 ASC NULLS LAST, s_zip@9 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC NULLS LAST, s_company_id@1 ASC NULLS LAST, s_street_number@2 ASC NULLS LAST, s_street_name@3 ASC NULLS LAST, s_street_type@4 ASC NULLS LAST, s_suite_number@5 ASC NULLS LAST, s_city@6 ASC NULLS LAST, s_county@7 ASC NULLS LAST, s_state@8 ASC NULLS LAST, s_zip@9 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_store_name@0 as s_store_name, s_company_id@1 as s_company_id, s_street_number@2 as s_street_number, s_street_name@3 as s_street_name, s_street_type@4 as s_street_type, s_suite_number@5 as s_suite_number, s_city@6 as s_city, s_county@7 as s_county, s_state@8 as s_state, s_zip@9 as s_zip, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END)@10 as 30 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END)@11 as 31-60 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END)@12 as 61-90 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END)@13 as 91-120 days, sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)@14 as >120 days] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_store_name@0 as s_store_name, s_company_id@1 as s_company_id, s_street_number@2 as s_street_number, s_street_name@3 as s_street_name, s_street_type@4 as s_street_type, s_suite_number@5 as s_suite_number, s_city@6 as s_city, s_county@7 as s_county, s_state@8 as s_state, s_zip@9 as s_zip], aggr=[sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_name@0, s_company_id@1, s_street_number@2, s_street_name@3, s_street_type@4, s_suite_number@5, s_city@6, s_county@7, s_state@8, s_zip@9], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_store_name@1 as s_store_name, s_company_id@2 as s_company_id, s_street_number@3 as s_street_number, s_street_name@4 as s_street_name, s_street_type@5 as s_street_type, s_suite_number@6 as s_suite_number, s_city@7 as s_city, s_county@8 as s_county, s_state@9 as s_state, s_zip@10 as s_zip], aggr=[sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(30) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(60) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(90) AND store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN store_returns.sr_returned_date_sk - store_sales.ss_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] | +| | ProjectionExec: expr=[sr_returned_date_sk@1 - ss_sold_date_sk@0 as __common_expr_1, s_store_name@2 as s_store_name, s_company_id@3 as s_company_id, s_street_number@4 as s_street_number, s_street_name@5 as s_street_name, s_street_type@6 as s_street_type, s_suite_number@7 as s_suite_number, s_city@8 as s_city, s_county@9 as s_county, s_state@10 as s_state, s_zip@11 as s_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@1, d_date_sk@0)], projection=[ss_sold_date_sk@0, sr_returned_date_sk@1, s_store_name@2, s_company_id@3, s_street_number@4, s_street_name@5, s_street_type@6, s_suite_number@7, s_city@8, s_county@9, s_state@10, s_zip@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_sold_date_sk@0, sr_returned_date_sk@1, s_store_name@2, s_company_id@3, s_street_number@4, s_street_name@5, s_street_type@6, s_suite_number@7, s_city@8, s_county@9, s_state@10, s_zip@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_sold_date_sk@0, sr_returned_date_sk@2, s_store_name@4, s_company_id@5, s_street_number@6, s_street_name@7, s_street_type@8, s_suite_number@9, s_city@10, s_county@11, s_state@12, s_zip@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_ticket_number@4, sr_ticket_number@3), (ss_item_sk@1, sr_item_sk@1), (ss_customer_sk@2, sr_customer_sk@2)], projection=[ss_sold_date_sk@0, ss_store_sk@3, sr_returned_date_sk@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@4, ss_item_sk@1, ss_customer_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ticket_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_ticket_number@3, sr_item_sk@1, sr_customer_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_item_sk, sr_customer_sk, sr_ticket_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_company_id, s_street_number, s_street_name, s_street_type, s_suite_number, s_city, s_county, s_state, s_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 = 8, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 8 AND 8 <= d_moy_max@5, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q51_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q51_explain.snap new file mode 100644 index 0000000000..810af2e864 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q51_explain.snap @@ -0,0 +1,94 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q51" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: y.item_sk ASC NULLS LAST, y.d_date ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: y | +| | Projection: x.item_sk, x.d_date, x.web_sales, x.store_sales, max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS web_cumulative, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS store_cumulative | +| | Filter: max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW > max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: x | +| | Projection: CASE WHEN web.item_sk IS NOT NULL THEN web.item_sk ELSE store.item_sk END AS item_sk, CASE WHEN web.d_date IS NOT NULL THEN web.d_date ELSE store.d_date END AS d_date, web.cume_sales AS web_sales, store.cume_sales AS store_sales | +| | Full Join: web.item_sk = store.item_sk, web.d_date = store.d_date | +| | SubqueryAlias: web | +| | SubqueryAlias: web_v1 | +| | Projection: web_sales.ws_item_sk AS item_sk, date_dim.d_date, sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS cume_sales | +| | WindowAggr: windowExpr=[[sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[web_sales.ws_item_sk, date_dim.d_date]], aggr=[[sum(web_sales.ws_sales_price)]] | +| | Projection: web_sales.ws_item_sk, web_sales.ws_sales_price, date_dim.d_date | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_sales_price], full_filters=[web_sales.ws_item_sk IS NOT NULL] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1215), date_dim.d_month_seq <= Int32(1226)] | +| | SubqueryAlias: store | +| | SubqueryAlias: store_v1 | +| | Projection: store_sales.ss_item_sk AS item_sk, date_dim.d_date, sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS cume_sales | +| | WindowAggr: windowExpr=[[sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[store_sales.ss_item_sk, date_dim.d_date]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: store_sales.ss_item_sk, store_sales.ss_sales_price, date_dim.d_date | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_sales_price], full_filters=[store_sales.ss_item_sk IS NOT NULL] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1215), date_dim.d_month_seq <= Int32(1226)] | +| physical_plan | SortPreservingMergeExec: [item_sk@0 ASC NULLS LAST, d_date@1 ASC NULLS LAST], fetch=100 | +| | ProjectionExec: expr=[item_sk@0 as item_sk, d_date@1 as d_date, web_sales@2 as web_sales, store_sales@3 as store_sales, max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 as web_cumulative, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 as store_cumulative] | +| | CoalesceBatchesExec: target_batch_size=8192, fetch=100 | +| | FilterExec: max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@4 > max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 | +| | BoundedWindowAggExec: wdw=[max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "max(x.web_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: Decimal128(27, 2), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: CurrentRow, is_causal: true }, max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "max(x.store_sales) PARTITION BY [x.item_sk] ORDER BY [x.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: Decimal128(27, 2), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: CurrentRow, is_causal: true }], mode=[Sorted] | +| | SortExec: expr=[item_sk@0 ASC NULLS LAST, d_date@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[CASE WHEN item_sk@0 IS NOT NULL THEN item_sk@0 ELSE item_sk@3 END as item_sk, CASE WHEN d_date@1 IS NOT NULL THEN d_date@1 ELSE d_date@4 END as d_date, cume_sales@2 as web_sales, cume_sales@5 as store_sales] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Full, on=[(item_sk@0, item_sk@0), (d_date@1, d_date@1)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@0, d_date@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ws_item_sk@0 as item_sk, d_date@1 as d_date, sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as cume_sales] | +| | BoundedWindowAggExec: wdw=[sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "sum(sum(web_sales.ws_sales_price)) PARTITION BY [web_sales.ws_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: Decimal128(27, 2), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: CurrentRow, is_causal: true }], mode=[Sorted] | +| | SortExec: expr=[ws_item_sk@0 ASC NULLS LAST, d_date@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[ws_item_sk@0 as ws_item_sk, d_date@1 as d_date], aggr=[sum(web_sales.ws_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0, d_date@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ws_item_sk@0 as ws_item_sk, d_date@2 as d_date], aggr=[sum(web_sales.ws_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_sales_price@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_sales_price], predicate=ws_item_sk@3 IS NOT NULL, pruning_predicate=ws_item_sk_null_count@1 != ws_item_sk_row_count@0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1215 AND d_month_seq@3 <= 1226, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1215 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1226, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@0, d_date@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_item_sk@0 as item_sk, d_date@1 as d_date, sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@3 as cume_sales] | +| | BoundedWindowAggExec: wdw=[sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "sum(sum(store_sales.ss_sales_price)) PARTITION BY [store_sales.ss_item_sk] ORDER BY [date_dim.d_date ASC NULLS LAST] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: Decimal128(27, 2), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: CurrentRow, is_causal: true }], mode=[Sorted] | +| | SortExec: expr=[ss_item_sk@0 ASC NULLS LAST, d_date@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_item_sk@0 as ss_item_sk, d_date@1 as d_date], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0, d_date@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_item_sk@0 as ss_item_sk, d_date@2 as d_date], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_sales_price@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_sales_price], predicate=ss_item_sk@2 IS NOT NULL, pruning_predicate=ss_item_sk_null_count@1 != ss_item_sk_row_count@0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1215 AND d_month_seq@3 <= 1226, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1215 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1226, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q52_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q52_explain.snap new file mode 100644 index 0000000000..9361b08057 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q52_explain.snap @@ -0,0 +1,50 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q52" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: dt.d_year ASC NULLS LAST, ext_price DESC NULLS FIRST, brand_id ASC NULLS LAST, fetch=100 | +| | Projection: dt.d_year, item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price | +| | Aggregate: groupBy=[[dt.d_year, item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: dt.d_year, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: dt.d_year, store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: dt.d_date_sk = store_sales.ss_sold_date_sk | +| | SubqueryAlias: dt | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_moy = Int32(11), date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manager_id = Int32(1)] | +| physical_plan | SortPreservingMergeExec: [d_year@0 ASC NULLS LAST, ext_price@3 DESC, brand_id@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[d_year@0 ASC NULLS LAST, ext_price@3 DESC, brand_id@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@2 as brand_id, i_brand@1 as brand, sum(store_sales.ss_ext_sales_price)@3 as ext_price] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand@1 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, i_brand@1, i_brand_id@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand@3 as i_brand, i_brand_id@2 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[d_year@0, ss_ext_sales_price@2, i_brand_id@4, i_brand@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[d_year@1, ss_item_sk@3, ss_ext_sales_price@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_moy@8 = 11 AND d_year@6 = 2000, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 11 AND 11 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_brand], predicate=i_manager_id@20 = 1, pruning_predicate=i_manager_id_null_count@2 != i_manager_id_row_count@3 AND i_manager_id_min@0 <= 1 AND 1 <= i_manager_id_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q53_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q53_explain.snap new file mode 100644 index 0000000000..b3da44ae58 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q53_explain.snap @@ -0,0 +1,73 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q53" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: tmp1.avg_quarterly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST, tmp1.i_manufact_id ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: tmp1 | +| | Projection: item.i_manufact_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_quarterly_sales | +| | Filter: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(Some(0),21,6) THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(None,32,10) END > Decimal128(Some(1000000000),32,10) | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Projection: item.i_manufact_id, sum(store_sales.ss_sales_price) | +| | Aggregate: groupBy=[[item.i_manufact_id, date_dim.d_qoy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: item.i_manufact_id, store_sales.ss_sales_price, date_dim.d_qoy | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: item.i_manufact_id, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_qoy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_manufact_id, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: item.i_item_sk = store_sales.ss_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_manufact_id], full_filters=[(item.i_category = LargeUtf8("Books") OR item.i_category = LargeUtf8("Children") OR item.i_category = LargeUtf8("Electronics")) AND item.i_class IN ([LargeUtf8("personal"), LargeUtf8("portable"), LargeUtf8("reference"), LargeUtf8("self-help")]) AND item.i_brand IN ([LargeUtf8("scholaramalgamalg #14"), LargeUtf8("scholaramalgamalg #7"), LargeUtf8("exportiunivamalg #9"), LargeUtf8("scholaramalgamalg #9")]) OR (item.i_category = LargeUtf8("Women") OR item.i_category = LargeUtf8("Music") OR item.i_category = LargeUtf8("Men")) AND item.i_class IN ([LargeUtf8("accessories"), LargeUtf8("classical"), LargeUtf8("fragrances"), LargeUtf8("pants")]) AND item.i_brand IN ([LargeUtf8("amalgimporto #1"), LargeUtf8("edu packscholar #1"), LargeUtf8("exportiimporto #1"), LargeUtf8("importoamalg #1")])] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_qoy], full_filters=[date_dim.d_month_seq IN ([Int32(1197), Int32(1198), Int32(1199), Int32(1200), Int32(1201), Int32(1202), Int32(1203), Int32(1204), Int32(1205), Int32(1206), Int32(1207), Int32(1208)])] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk] | +| physical_plan | SortPreservingMergeExec: [avg_quarterly_sales@2 ASC NULLS LAST, sum_sales@1 ASC NULLS LAST, i_manufact_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[avg_quarterly_sales@2 ASC NULLS LAST, sum_sales@1 ASC NULLS LAST, i_manufact_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(store_sales.ss_sales_price)@1 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 as avg_quarterly_sales] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 > Some(0),21,6 THEN abs(sum(store_sales.ss_sales_price)@1 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 END > Some(1000000000),32,10 | +| | WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manufact_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_manufact_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_manufact_id@0 as i_manufact_id, sum(store_sales.ss_sales_price)@2 as sum(store_sales.ss_sales_price)] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_manufact_id@0 as i_manufact_id, d_qoy@1 as d_qoy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manufact_id@0, d_qoy@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_manufact_id@0 as i_manufact_id, d_qoy@2 as d_qoy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[i_manufact_id@0, ss_sales_price@2, d_qoy@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@1, d_date_sk@0)], projection=[i_manufact_id@0, ss_store_sk@2, ss_sales_price@3, d_qoy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_manufact_id@1, ss_sold_date_sk@2, ss_store_sk@4, ss_sales_price@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_manufact_id], predicate=(i_category@12 = Books OR i_category@12 = Children OR i_category@12 = Electronics) AND Use i_class@10 IN (SET) ([Literal { value: LargeUtf8("personal") }, Literal { value: LargeUtf8("portable") }, Literal { value: LargeUtf8("reference") }, Literal { value: LargeUtf8("self-help") }]) AND Use i_brand@8 IN (SET) ([Literal { value: LargeUtf8("scholaramalgamalg #14") }, Literal { value: LargeUtf8("scholaramalgamalg #7") }, Literal { value: LargeUtf8("exportiunivamalg #9") }, Literal { value: LargeUtf8("scholaramalgamalg #9") }]) OR (i_category@12 = Women OR i_category@12 = Music OR i_category@12 = Men) AND Use i_class@10 IN (SET) ([Literal { value: LargeUtf8("accessories") }, Literal { value: LargeUtf8("classical") }, Literal { value: LargeUtf8("fragrances") }, Literal { value: LargeUtf8("pants") }]) AND Use i_brand@8 IN (SET) ([Literal { value: LargeUtf8("amalgimporto #1") }, Literal { value: LargeUtf8("edu packscholar #1") }, Literal { value: LargeUtf8("exportiimporto #1") }, Literal { value: LargeUtf8("importoamalg #1") }]), pruning_predicate=(i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Books AND Books <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Children AND Children <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Electronics AND Electronics <= i_category_max@1) AND (i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= personal AND personal <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= portable AND portable <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= reference AND reference <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= self-help AND self-help <= i_class_max@5) AND (i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= scholaramalgamalg #14 AND scholaramalgamalg #14 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= scholaramalgamalg #7 AND scholaramalgamalg #7 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= exportiunivamalg #9 AND exportiunivamalg #9 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= scholaramalgamalg #9 AND scholaramalgamalg #9 <= i_brand_max@9) OR (i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Women AND Women <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Music AND Music <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1) AND (i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= accessories AND accessories <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= classical AND classical <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= fragrances AND fragrances <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= pants AND pants <= i_class_max@5) AND (i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= amalgimporto #1 AND amalgimporto #1 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= edu packscholar #1 AND edu packscholar #1 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= exportiimporto #1 AND exportiimporto #1 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= importoamalg #1 AND importoamalg #1 <= i_brand_max@9), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_qoy], predicate=Use d_month_seq@3 IN (SET) ([Literal { value: Int32(1197) }, Literal { value: Int32(1198) }, Literal { value: Int32(1199) }, Literal { value: Int32(1200) }, Literal { value: Int32(1201) }, Literal { value: Int32(1202) }, Literal { value: Int32(1203) }, Literal { value: Int32(1204) }, Literal { value: Int32(1205) }, Literal { value: Int32(1206) }, Literal { value: Int32(1207) }, Literal { value: Int32(1208) }]), pruning_predicate=d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1197 AND 1197 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1198 AND 1198 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1199 AND 1199 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1200 AND 1200 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1201 AND 1201 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1202 AND 1202 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1203 AND 1203 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1204 AND 1204 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1205 AND 1205 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1206 AND 1206 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1207 AND 1207 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1208 AND 1208 <= d_month_seq_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q54_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q54_explain.snap new file mode 100644 index 0000000000..d86f772a6c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q54_explain.snap @@ -0,0 +1,174 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q54" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: segments.segment ASC NULLS LAST, num_customers ASC NULLS LAST, fetch=100 | +| | Projection: segments.segment, count(*) AS num_customers, CAST(segments.segment AS Int64) * Int64(50) AS segment_base | +| | Aggregate: groupBy=[[segments.segment]], aggr=[[count(Int64(1)) AS count(*)]] | +| | SubqueryAlias: segments | +| | Projection: CAST(my_revenue.revenue / Decimal128(Some(50),20,0) AS Int32) AS segment | +| | SubqueryAlias: my_revenue | +| | Projection: sum(store_sales.ss_ext_sales_price) AS revenue | +| | Aggregate: groupBy=[[my_customers.c_customer_sk]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: my_customers.c_customer_sk, store_sales.ss_ext_sales_price | +| | Inner Join: Filter: CAST(date_dim.d_month_seq AS Int64) <= __scalar_sq_2.date_dim.d_month_seq + Int64(3) | +| | Projection: my_customers.c_customer_sk, store_sales.ss_ext_sales_price, date_dim.d_month_seq | +| | Inner Join: Filter: CAST(date_dim.d_month_seq AS Int64) >= __scalar_sq_1.date_dim.d_month_seq + Int64(1) | +| | Projection: my_customers.c_customer_sk, store_sales.ss_ext_sales_price, date_dim.d_month_seq | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: my_customers.c_customer_sk, store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price | +| | Inner Join: customer_address.ca_county = store.s_county, customer_address.ca_state = store.s_state | +| | Projection: my_customers.c_customer_sk, store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, customer_address.ca_county, customer_address.ca_state | +| | Inner Join: my_customers.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: my_customers.c_customer_sk, my_customers.c_current_addr_sk, store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price | +| | Inner Join: my_customers.c_customer_sk = store_sales.ss_customer_sk | +| | SubqueryAlias: my_customers | +| | Aggregate: groupBy=[[customer.c_customer_sk, customer.c_current_addr_sk]], aggr=[[]] | +| | Projection: customer.c_customer_sk, customer.c_current_addr_sk | +| | Inner Join: cs_or_ws_sales.customer_sk = customer.c_customer_sk | +| | Projection: cs_or_ws_sales.customer_sk | +| | Inner Join: cs_or_ws_sales.sold_date_sk = date_dim.d_date_sk | +| | Projection: cs_or_ws_sales.sold_date_sk, cs_or_ws_sales.customer_sk | +| | Inner Join: cs_or_ws_sales.item_sk = item.i_item_sk | +| | SubqueryAlias: cs_or_ws_sales | +| | Union | +| | Projection: catalog_sales.cs_sold_date_sk AS sold_date_sk, catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] | +| | Projection: web_sales.ws_sold_date_sk AS sold_date_sk, web_sales.ws_bill_customer_sk AS customer_sk, web_sales.ws_item_sk AS item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_category = LargeUtf8("Men"), item.i_class = LargeUtf8("shirts")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(4), date_dim.d_year = Int32(1998)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_county, ca_state] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_county, s_state] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| | SubqueryAlias: __scalar_sq_1 | +| | Aggregate: groupBy=[[date_dim.d_month_seq + Int64(1)]], aggr=[[]] | +| | Projection: CAST(date_dim.d_month_seq AS Int64) + Int64(1) | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_month_seq], full_filters=[date_dim.d_year = Int32(1998), date_dim.d_moy = Int32(4)] | +| | SubqueryAlias: __scalar_sq_2 | +| | Aggregate: groupBy=[[date_dim.d_month_seq + Int64(3)]], aggr=[[]] | +| | Projection: CAST(date_dim.d_month_seq AS Int64) + Int64(3) | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_month_seq], full_filters=[date_dim.d_year = Int32(1998), date_dim.d_moy = Int32(4)] | +| physical_plan | SortPreservingMergeExec: [segment@0 ASC NULLS LAST, num_customers@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[segment@0 ASC NULLS LAST, num_customers@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[segment@0 as segment, count(*)@1 as num_customers, CAST(segment@0 AS Int64) * 50 as segment_base] | +| | AggregateExec: mode=FinalPartitioned, gby=[segment@0 as segment], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([segment@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[segment@0 as segment], aggr=[count(*)] | +| | ProjectionExec: expr=[CAST(sum(store_sales.ss_ext_sales_price)@1 / Some(50),20,0 AS Int32) as segment] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_sk@0 as c_customer_sk], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | NestedLoopJoinExec: join_type=Inner, filter=CAST(d_month_seq@0 AS Int64) <= date_dim.d_month_seq + Int64(3)@1, projection=[c_customer_sk@0, ss_ext_sales_price@1] | +| | CoalescePartitionsExec | +| | NestedLoopJoinExec: join_type=Inner, filter=CAST(d_month_seq@0 AS Int64) >= date_dim.d_month_seq + Int64(1)@1, projection=[c_customer_sk@0, ss_ext_sales_price@1, d_month_seq@2] | +| | CoalescePartitionsExec | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@1, d_date_sk@0)], projection=[c_customer_sk@0, ss_ext_sales_price@2, d_month_seq@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_county@3, s_county@0), (ca_state@4, s_state@1)], projection=[c_customer_sk@0, ss_sold_date_sk@1, ss_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_county@3, ca_state@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@1, ca_address_sk@0)], projection=[c_customer_sk@0, ss_sold_date_sk@2, ss_ext_sales_price@3, ca_county@5, ca_state@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_sk@0, c_current_addr_sk@1, ss_sold_date_sk@2, ss_ext_sales_price@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_sk@0 as c_customer_sk, c_current_addr_sk@1 as c_current_addr_sk], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0, c_current_addr_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_sk@0 as c_customer_sk, c_current_addr_sk@1 as c_current_addr_sk], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_sk@0, c_customer_sk@0)], projection=[c_customer_sk@1, c_current_addr_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sold_date_sk@0, d_date_sk@0)], projection=[customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_sk@2, i_item_sk@0)], projection=[sold_date_sk@0, customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@2], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[cs_sold_date_sk@0 as sold_date_sk, cs_bill_customer_sk@1 as customer_sk, cs_item_sk@2 as item_sk] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] | +| | ProjectionExec: expr=[ws_sold_date_sk@0 as sold_date_sk, ws_bill_customer_sk@2 as customer_sk, ws_item_sk@1 as item_sk] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_category@12 = Men AND i_class@10 = shirts, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1 AND i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= shirts AND shirts <= i_class_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 4 AND d_year@6 = 1998, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 4 AND 4 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1998 AND 1998 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_county, ca_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_county@0, s_state@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_county, s_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_month_seq] | +| | AggregateExec: mode=FinalPartitioned, gby=[date_dim.d_month_seq + Int64(1)@0 as date_dim.d_month_seq + Int64(1)], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([date_dim.d_month_seq + Int64(1)@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[date_dim.d_month_seq + Int64(1)@0 as date_dim.d_month_seq + Int64(1)], aggr=[] | +| | ProjectionExec: expr=[CAST(d_month_seq@0 AS Int64) + 1 as date_dim.d_month_seq + Int64(1)] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_month_seq], predicate=d_year@6 = 1998 AND d_moy@8 = 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 4 AND 4 <= d_moy_max@5, required_guarantees=[N] | +| | AggregateExec: mode=FinalPartitioned, gby=[date_dim.d_month_seq + Int64(3)@0 as date_dim.d_month_seq + Int64(3)], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([date_dim.d_month_seq + Int64(3)@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[date_dim.d_month_seq + Int64(3)@0 as date_dim.d_month_seq + Int64(3)], aggr=[] | +| | ProjectionExec: expr=[CAST(d_month_seq@0 AS Int64) + 3 as date_dim.d_month_seq + Int64(3)] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_month_seq], predicate=d_year@6 = 1998 AND d_moy@8 = 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 4 AND 4 <= d_moy_max@5, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q55_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q55_explain.snap new file mode 100644 index 0000000000..dc480f4f6f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q55_explain.snap @@ -0,0 +1,51 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q55" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: brand_id, brand, ext_price | +| | Sort: ext_price DESC NULLS FIRST, item.i_brand_id ASC NULLS LAST, fetch=100 | +| | Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, sum(store_sales.ss_ext_sales_price) AS ext_price, item.i_brand_id | +| | Aggregate: groupBy=[[item.i_brand, item.i_brand_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, item.i_brand_id, item.i_brand | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: date_dim.d_date_sk = store_sales.ss_sold_date_sk | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(12), date_dim.d_year = Int32(1998)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manager_id = Int32(20)] | +| physical_plan | ProjectionExec: expr=[brand_id@0 as brand_id, brand@1 as brand, ext_price@2 as ext_price] | +| | SortPreservingMergeExec: [ext_price@2 DESC, i_brand_id@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[ext_price@2 DESC, i_brand_id@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_brand_id@1 as brand_id, i_brand@0 as brand, sum(store_sales.ss_ext_sales_price)@2 as ext_price, i_brand_id@1 as i_brand_id] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_brand@0 as i_brand, i_brand_id@1 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_brand@0, i_brand_id@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_brand@2 as i_brand, i_brand_id@1 as i_brand_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_ext_sales_price@1, i_brand_id@3, i_brand@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_date_sk@0, ss_sold_date_sk@0)], projection=[ss_item_sk@2, ss_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 12 AND d_year@6 = 1998, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 12 AND 12 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1998 AND 1998 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_brand], predicate=i_manager_id@20 = 20, pruning_predicate=i_manager_id_null_count@2 != i_manager_id_row_count@3 AND i_manager_id_min@0 <= 20 AND 20 <= i_manager_id_max@1, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q56_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q56_explain.snap new file mode 100644 index 0000000000..32308ab75d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q56_explain.snap @@ -0,0 +1,202 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q56" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: total_sales ASC NULLS LAST, tmp1.i_item_id ASC NULLS LAST, fetch=100 | +| | Projection: tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales | +| | Aggregate: groupBy=[[tmp1.i_item_id]], aggr=[[sum(tmp1.total_sales)]] | +| | SubqueryAlias: tmp1 | +| | Union | +| | SubqueryAlias: ss | +| | Projection: item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | LeftSemi Join: item.i_item_id = __correlated_sq_1.i_item_id | +| | Projection: store_sales.ss_ext_sales_price, item.i_item_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1998), date_dim.d_moy = Int32(5)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-500),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_id], full_filters=[item.i_color = LargeUtf8("powder") OR item.i_color = LargeUtf8("goldenrod") OR item.i_color = LargeUtf8("bisque")] | +| | SubqueryAlias: cs | +| | Projection: item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | LeftSemi Join: item.i_item_id = __correlated_sq_2.i_item_id | +| | Projection: catalog_sales.cs_ext_sales_price, item.i_item_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price | +| | Inner Join: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: catalog_sales.cs_bill_addr_sk, catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1998), date_dim.d_moy = Int32(5)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-500),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | SubqueryAlias: __correlated_sq_2 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_id], full_filters=[item.i_color = LargeUtf8("powder") OR item.i_color = LargeUtf8("goldenrod") OR item.i_color = LargeUtf8("bisque")] | +| | SubqueryAlias: ws | +| | Projection: item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | LeftSemi Join: item.i_item_id = __correlated_sq_3.i_item_id | +| | Projection: web_sales.ws_ext_sales_price, item.i_item_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_ext_sales_price | +| | Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1998), date_dim.d_moy = Int32(5)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-500),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | SubqueryAlias: __correlated_sq_3 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_id], full_filters=[item.i_color = LargeUtf8("powder") OR item.i_color = LargeUtf8("goldenrod") OR item.i_color = LargeUtf8("bisque")] | +| physical_plan | SortPreservingMergeExec: [total_sales@1 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[total_sales@1 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(tmp1.total_sales)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(tmp1.total_sales)] | +| | InterleaveExec | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(store_sales.ss_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_item_id@1, i_item_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_ext_sales_price@1, i_item_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_addr_sk@2, ss_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1998 AND d_moy@8 = 5, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 5 AND 5 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-500),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-500),5,2 AND Some(-500),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_id], predicate=i_color@17 = powder OR i_color@17 = goldenrod OR i_color@17 = bisque, pruning_predicate=i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= powder AND powder <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= goldenrod AND goldenrod <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= bisque AND bisque <= i_color_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(catalog_sales.cs_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_item_id@1, i_item_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_ext_sales_price@1, i_item_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_addr_sk@0, ca_address_sk@0)], projection=[cs_item_sk@1, cs_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_bill_addr_sk@1, cs_item_sk@2, cs_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1998 AND d_moy@8 = 5, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 5 AND 5 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-500),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-500),5,2 AND Some(-500),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_id], predicate=i_color@17 = powder OR i_color@17 = goldenrod OR i_color@17 = bisque, pruning_predicate=i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= powder AND powder <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= goldenrod AND goldenrod <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= bisque AND bisque <= i_color_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(web_sales.ws_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_item_id@1, i_item_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_ext_sales_price@1, i_item_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_addr_sk@1, ca_address_sk@0)], projection=[ws_item_sk@0, ws_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_bill_addr_sk@2, ws_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1998 AND d_moy@8 = 5, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 5 AND 5 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-500),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-500),5,2 AND Some(-500),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_id], predicate=i_color@17 = powder OR i_color@17 = goldenrod OR i_color@17 = bisque, pruning_predicate=i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= powder AND powder <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= goldenrod AND goldenrod <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= bisque AND bisque <= i_color_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q57_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q57_explain.snap new file mode 100644 index 0000000000..22d5a2118c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q57_explain.snap @@ -0,0 +1,215 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q57" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: v2.sum_sales - v2.avg_monthly_sales ASC NULLS LAST, v2.psum ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: v2 | +| | Projection: v1.cc_name, v1.d_year, v1.d_moy, v1.avg_monthly_sales, v1.sum_sales, v1_lag.sum_sales AS psum, v1_lead.sum_sales AS nsum | +| | Inner Join: v1.i_category = v1_lead.i_category, v1.i_brand = v1_lead.i_brand, v1.cc_name = v1_lead.cc_name, CAST(v1.rn AS Decimal128(20, 0)) = CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0)) | +| | Projection: v1.i_category, v1.i_brand, v1.cc_name, v1.d_year, v1.d_moy, v1.sum_sales, v1.avg_monthly_sales, v1.rn, v1_lag.sum_sales | +| | Inner Join: v1.i_category = v1_lag.i_category, v1.i_brand = v1_lag.i_brand, v1.cc_name = v1_lag.cc_name, CAST(v1.rn AS Decimal128(20, 0)) = CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0)) | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy, sum(catalog_sales.cs_sales_price) AS sum_sales, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | Projection: item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy, sum(catalog_sales.cs_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING | +| | Filter: __common_expr_3 AND CASE WHEN __common_expr_3 THEN abs(sum(catalog_sales.cs_sales_price) - avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(None,32,10) END > Decimal128(Some(1000000000),32,10) | +| | Projection: avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(Some(0),21,6) AS __common_expr_3, item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy, sum(catalog_sales.cs_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING | +| | WindowAggr: windowExpr=[[avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Filter: date_dim.d_year = Int32(2000) | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy, call_center.cc_name | +| | Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_sold_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price | +| | Inner Join: item.i_item_sk = catalog_sales.cs_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(1999) AND date_dim.d_moy = Int32(12) OR date_dim.d_year = Int32(2001) AND date_dim.d_moy = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| | SubqueryAlias: v1_lag | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy, call_center.cc_name | +| | Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_sold_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price | +| | Inner Join: item.i_item_sk = catalog_sales.cs_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(1999) AND date_dim.d_moy = Int32(12) OR date_dim.d_year = Int32(2001) AND date_dim.d_moy = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| | SubqueryAlias: v1_lead | +| | SubqueryAlias: v1 | +| | Projection: item.i_category, item.i_brand, call_center.cc_name, sum(catalog_sales.cs_sales_price) AS sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rn | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year, date_dim.d_moy]], aggr=[[sum(catalog_sales.cs_sales_price)]] | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy, call_center.cc_name | +| | Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price, date_dim.d_year, date_dim.d_moy | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_brand, item.i_category, catalog_sales.cs_sold_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_sales_price | +| | Inner Join: item.i_item_sk = catalog_sales.cs_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_category] | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(1999) AND date_dim.d_moy = Int32(12) OR date_dim.d_year = Int32(2001) AND date_dim.d_moy = Int32(1)] | +| | BytesProcessedNode | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| physical_plan | SortPreservingMergeExec: [sum_sales@4 - avg_monthly_sales@3 ASC NULLS LAST, psum@5 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[sum_sales@4 - avg_monthly_sales@3 ASC NULLS LAST, psum@5 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[cc_name@0 as cc_name, d_year@1 as d_year, d_moy@2 as d_moy, avg_monthly_sales@4 as avg_monthly_sales, sum_sales@3 as sum_sales, sum_sales@5 as psum, sum_sales@6 as nsum] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (cc_name@2, cc_name@2), (CAST(v1.rn AS Decimal128(20, 0))@9, CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0))@5)], projection=[cc_name@2, d_year@3, d_moy@4, sum_sales@5, avg_monthly_sales@6, sum_sales@8, sum_sales@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, CAST(v1.rn AS Decimal128(20, 0))@9], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy, sum_sales@5 as sum_sales, avg_monthly_sales@6 as avg_monthly_sales, rn@7 as rn, sum_sales@8 as sum_sales, CAST(rn@7 AS Decimal128(20, 0)) as CAST(v1.rn AS Decimal128(20, 0))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_category@0, i_category@0), (i_brand@1, i_brand@1), (cc_name@2, cc_name@2), (CAST(v1.rn AS Decimal128(20, 0))@8, CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0))@5)], projection=[i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4, sum_sales@5, avg_monthly_sales@6, rn@7, sum_sales@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, CAST(v1.rn AS Decimal128(20, 0))@8], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy, sum(catalog_sales.cs_sales_price)@5 as sum_sales, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg_monthly_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rn, CAST(rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 AS Decimal128(20, 0)) as CAST(v1.rn AS Decimal128(20, 0))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: __common_expr_3@0 AND CASE WHEN __common_expr_3@0 THEN abs(sum(catalog_sales.cs_sales_price)@6 - avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8) / avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8 END > Some(1000000000),32,10, projection=[i_category@1, i_brand@2, cc_name@3, d_year@4, d_moy@5, sum(catalog_sales.cs_sales_price)@6, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@7, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@8] | +| | ProjectionExec: expr=[avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 > Some(0),21,6 as __common_expr_3, i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy, sum(catalog_sales.cs_sales_price)@5 as sum(catalog_sales.cs_sales_price), rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING] | +| | WindowAggExec: wdw=[avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(catalog_sales.cs_sales_price)) PARTITION BY [item.i_category, item.i_brand, call_center.cc_name, date_dim.d_year] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, d_year@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: d_year@3 = 2000 | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Int32(NULL)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_year@3 ASC NULLS LAST, d_moy@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, cc_name@5 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_call_center_sk@2, cc_call_center_sk@0)], projection=[i_brand@0, i_category@1, cs_sales_price@3, d_year@4, d_moy@5, cc_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_call_center_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@2, d_date_sk@0)], projection=[i_brand@0, i_category@1, cs_call_center_sk@3, cs_sales_price@4, d_year@6, d_moy@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@2)], projection=[i_brand@1, i_category@2, cs_sold_date_sk@3, cs_call_center_sk@4, cs_sales_price@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2000 OR d_year@6 = 1999 AND d_moy@8 = 12 OR d_year@6 = 2001 AND d_moy@8 = 1, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 1 AND 1 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cc_call_center_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/call_center/call_center.parquet]]}, projection=[cc_call_center_sk, cc_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0))@5], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, sum(catalog_sales.cs_sales_price)@5 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rn, CAST(CAST(rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 AS Int64) + 1 AS Decimal128(20, 0)) as CAST(CAST(v1_lag.rn AS Int64) + Int64(1) AS Decimal128(20, 0))] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Int32(NULL)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_year@3 ASC NULLS LAST, d_moy@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, cc_name@5 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_call_center_sk@2, cc_call_center_sk@0)], projection=[i_brand@0, i_category@1, cs_sales_price@3, d_year@4, d_moy@5, cc_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_call_center_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@2, d_date_sk@0)], projection=[i_brand@0, i_category@1, cs_call_center_sk@3, cs_sales_price@4, d_year@6, d_moy@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@2)], projection=[i_brand@1, i_category@2, cs_sold_date_sk@3, cs_call_center_sk@4, cs_sales_price@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2000 OR d_year@6 = 1999 AND d_moy@8 = 12 OR d_year@6 = 2001 AND d_moy@8 = 1, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 1 AND 1 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cc_call_center_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/call_center/call_center.parquet]]}, projection=[cc_call_center_sk, cc_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0))@5], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, sum(catalog_sales.cs_sales_price)@5 as sum_sales, rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 as rn, CAST(CAST(rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@6 AS Int64) - 1 AS Decimal128(20, 0)) as CAST(CAST(v1_lead.rn AS Int64) - Int64(1) AS Decimal128(20, 0))] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [item.i_category, item.i_brand, call_center.cc_name] ORDER BY [date_dim.d_year ASC NULLS LAST, date_dim.d_moy ASC NULLS LAST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Int32(NULL)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST, d_year@3 ASC NULLS LAST, d_moy@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_brand@1 as i_brand, cc_name@2 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@1, cc_name@2, d_year@3, d_moy@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@1 as i_category, i_brand@0 as i_brand, cc_name@5 as cc_name, d_year@3 as d_year, d_moy@4 as d_moy], aggr=[sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_call_center_sk@2, cc_call_center_sk@0)], projection=[i_brand@0, i_category@1, cs_sales_price@3, d_year@4, d_moy@5, cc_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_call_center_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@2, d_date_sk@0)], projection=[i_brand@0, i_category@1, cs_call_center_sk@3, cs_sales_price@4, d_year@6, d_moy@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, cs_item_sk@2)], projection=[i_brand@1, i_category@2, cs_sold_date_sk@3, cs_call_center_sk@4, cs_sales_price@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_item_sk, cs_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2000 OR d_year@6 = 1999 AND d_moy@8 = 12 OR d_year@6 = 2001 AND d_moy@8 = 1, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 12 AND 12 <= d_moy_max@5 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 1 AND 1 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cc_call_center_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/call_center/call_center.parquet]]}, projection=[cc_call_center_sk, cc_name] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q58_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q58_explain.snap new file mode 100644 index 0000000000..13b2b7b85c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q58_explain.snap @@ -0,0 +1,222 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q58" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: ss_items.item_id ASC NULLS LAST, ss_items.ss_item_rev ASC NULLS LAST, fetch=100 | +| | Projection: ss_items.item_id, ss_items.ss_item_rev, ss_items.ss_item_rev / __common_expr_7 * Decimal128(Some(100),20,0) AS ss_dev, cs_items.cs_item_rev, cs_items.cs_item_rev / __common_expr_7 * Decimal128(Some(100),20,0) AS cs_dev, ws_items.ws_item_rev, ws_items.ws_item_rev / __common_expr_7 * Decimal128(Some(100),20,0) AS ws_dev, __common_expr_7 AS average | +| | Projection: (ss_items.ss_item_rev + cs_items.cs_item_rev + ws_items.ws_item_rev) / Decimal128(Some(3),20,0) AS __common_expr_7, ss_items.item_id, ss_items.ss_item_rev, cs_items.cs_item_rev, ws_items.ws_item_rev | +| | Projection: ss_items.item_id, ss_items.ss_item_rev, cs_items.cs_item_rev, ws_items.ws_item_rev | +| | Inner Join: ss_items.item_id = ws_items.item_id Filter: CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ws_items.ws_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ws_items.ws_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) | +| | Projection: ss_items.item_id, ss_items.ss_item_rev, cs_items.cs_item_rev | +| | Inner Join: ss_items.item_id = cs_items.item_id Filter: CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(ss_items.ss_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(cs_items.cs_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) >= CAST(Float64(0.9) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) AND CAST(cs_items.cs_item_rev AS Decimal128(30, 15)) <= CAST(Float64(1.1) * CAST(ss_items.ss_item_rev AS Float64) AS Decimal128(30, 15)) | +| | SubqueryAlias: ss_items | +| | Projection: item.i_item_id AS item_id, sum(store_sales.ss_ext_sales_price) AS ss_item_rev | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, item.i_item_id | +| | LeftSemi Join: date_dim.d_date = __correlated_sq_1.d_date | +| | Projection: store_sales.ss_ext_sales_price, item.i_item_id, date_dim.d_date | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, item.i_item_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: date_dim.d_date | +| | Inner Join: date_dim.d_week_seq = __scalar_sq_4.d_week_seq | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date, d_week_seq] | +| | SubqueryAlias: __scalar_sq_4 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_date = Date32("2000-02-12")] | +| | SubqueryAlias: cs_items | +| | Projection: item.i_item_id AS item_id, sum(catalog_sales.cs_ext_sales_price) AS cs_item_rev | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | Projection: catalog_sales.cs_ext_sales_price, item.i_item_id | +| | LeftSemi Join: date_dim.d_date = __correlated_sq_2.d_date | +| | Projection: catalog_sales.cs_ext_sales_price, item.i_item_id, date_dim.d_date | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_sales_price, item.i_item_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: date_dim.d_date | +| | Inner Join: date_dim.d_week_seq = __scalar_sq_5.d_week_seq | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date, d_week_seq] | +| | SubqueryAlias: __scalar_sq_5 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_date = Date32("2000-02-12")] | +| | SubqueryAlias: ws_items | +| | Projection: item.i_item_id AS item_id, sum(web_sales.ws_ext_sales_price) AS ws_item_rev | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | Projection: web_sales.ws_ext_sales_price, item.i_item_id | +| | LeftSemi Join: date_dim.d_date = __correlated_sq_3.d_date | +| | Projection: web_sales.ws_ext_sales_price, item.i_item_id, date_dim.d_date | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_sales_price, item.i_item_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: __correlated_sq_3 | +| | Projection: date_dim.d_date | +| | Inner Join: date_dim.d_week_seq = __scalar_sq_6.d_week_seq | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date, d_week_seq] | +| | SubqueryAlias: __scalar_sq_6 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_date = Date32("2000-02-12")] | +| physical_plan | SortPreservingMergeExec: [item_id@0 ASC NULLS LAST, ss_item_rev@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[item_id@0 ASC NULLS LAST, ss_item_rev@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[item_id@1 as item_id, ss_item_rev@2 as ss_item_rev, ss_item_rev@2 / __common_expr_7@0 * Some(100),20,0 as ss_dev, cs_item_rev@3 as cs_item_rev, cs_item_rev@3 / __common_expr_7@0 * Some(100),20,0 as cs_dev, ws_item_rev@4 as ws_item_rev, ws_item_rev@4 / __common_expr_7@0 * Some(100),20,0 as ws_dev, __common_expr_7@0 as average] | +| | ProjectionExec: expr=[(ss_item_rev@1 + cs_item_rev@2 + ws_item_rev@3) / Some(3),20,0 as __common_expr_7, item_id@0 as item_id, ss_item_rev@1 as ss_item_rev, cs_item_rev@2 as cs_item_rev, ws_item_rev@3 as ws_item_rev] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_id@0, item_id@0)], filter=CAST(ss_item_rev@0 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(ss_item_rev@0 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ws_item_rev@2 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)) AND CAST(ws_item_rev@2 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)), projection=[item_id@0, ss_item_rev@1, cs_item_rev@2, ws_item_rev@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_id@0, item_id@0)], filter=CAST(ss_item_rev@0 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)) AND CAST(ss_item_rev@0 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(cs_item_rev@1 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) >= CAST(0.9 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)) AND CAST(cs_item_rev@1 AS Decimal128(30, 15)) <= CAST(1.1 * CAST(ss_item_rev@0 AS Float64) AS Decimal128(30, 15)), projection=[item_id@0, ss_item_rev@1, cs_item_rev@3] | +| | ProjectionExec: expr=[i_item_id@0 as item_id, sum(store_sales.ss_ext_sales_price)@1 as ss_item_rev] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[ss_ext_sales_price@0, i_item_id@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_ext_sales_price@1, i_item_id@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[ss_sold_date_sk@0, ss_ext_sales_price@2, i_item_id@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_week_seq@1, d_week_seq@0)], projection=[d_date@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date, d_week_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_date@2 = 2000-02-12, pruning_predicate=d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-02-12 AND 2000-02-12 <= d_date_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as item_id, sum(catalog_sales.cs_ext_sales_price)@1 as cs_item_rev] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[cs_ext_sales_price@0, i_item_id@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_ext_sales_price@1, i_item_id@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@1, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_ext_sales_price@2, i_item_id@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_week_seq@1, d_week_seq@0)], projection=[d_date@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date, d_week_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_date@2 = 2000-02-12, pruning_predicate=d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-02-12 AND 2000-02-12 <= d_date_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as item_id, sum(web_sales.ws_ext_sales_price)@1 as ws_item_rev] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[ws_ext_sales_price@0, i_item_id@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_ext_sales_price@1, i_item_id@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@1, i_item_sk@0)], projection=[ws_sold_date_sk@0, ws_ext_sales_price@2, i_item_id@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_week_seq@1, d_week_seq@0)], projection=[d_date@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date, d_week_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_date@2 = 2000-02-12, pruning_predicate=d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-02-12 AND 2000-02-12 <= d_date_max@1, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q59_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q59_explain.snap new file mode 100644 index 0000000000..6ecf3fedf8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q59_explain.snap @@ -0,0 +1,129 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q59" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: y.s_store_name1 ASC NULLS LAST, y.s_store_id1 ASC NULLS LAST, y.d_week_seq1 ASC NULLS LAST, fetch=100 | +| | Projection: y.s_store_name1, y.s_store_id1, y.d_week_seq1, y.sun_sales1 / x.sun_sales2, y.mon_sales1 / x.mon_sales2, y.tue_sales1 / x.tue_sales2, y.wed_sales1 / x.wed_sales2, y.thu_sales1 / x.thu_sales2, y.fri_sales1 / x.fri_sales2, y.sat_sales1 / x.sat_sales2 | +| | Inner Join: y.s_store_id1 = x.s_store_id2, CAST(y.d_week_seq1 AS Int64) = CAST(x.d_week_seq2 AS Int64) - Int64(52) | +| | SubqueryAlias: y | +| | Projection: store.s_store_name AS s_store_name1, wss.d_week_seq AS d_week_seq1, store.s_store_id AS s_store_id1, wss.sun_sales AS sun_sales1, wss.mon_sales AS mon_sales1, wss.tue_sales AS tue_sales1, wss.wed_sales AS wed_sales1, wss.thu_sales AS thu_sales1, wss.fri_sales AS fri_sales1, wss.sat_sales AS sat_sales1 | +| | Inner Join: wss.d_week_seq = d.d_week_seq | +| | Projection: wss.d_week_seq, wss.sun_sales, wss.mon_sales, wss.tue_sales, wss.wed_sales, wss.thu_sales, wss.fri_sales, wss.sat_sales, store.s_store_id, store.s_store_name | +| | Inner Join: wss.ss_store_sk = store.s_store_sk | +| | SubqueryAlias: wss | +| | Projection: date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq, store_sales.ss_store_sk]], aggr=[[sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Sunday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Monday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Tuesday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Wednesday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Thursday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Friday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Saturday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] | +| | Projection: store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_week_seq, date_dim.d_day_name | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id, s_store_name] | +| | SubqueryAlias: d | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_month_seq >= Int32(1206), date_dim.d_month_seq <= Int32(1217)] | +| | SubqueryAlias: x | +| | Projection: wss.d_week_seq AS d_week_seq2, store.s_store_id AS s_store_id2, wss.sun_sales AS sun_sales2, wss.mon_sales AS mon_sales2, wss.tue_sales AS tue_sales2, wss.wed_sales AS wed_sales2, wss.thu_sales AS thu_sales2, wss.fri_sales AS fri_sales2, wss.sat_sales AS sat_sales2 | +| | Inner Join: wss.d_week_seq = d.d_week_seq | +| | Projection: wss.d_week_seq, wss.sun_sales, wss.mon_sales, wss.tue_sales, wss.wed_sales, wss.thu_sales, wss.fri_sales, wss.sat_sales, store.s_store_id | +| | Inner Join: wss.ss_store_sk = store.s_store_sk | +| | SubqueryAlias: wss | +| | Projection: date_dim.d_week_seq, store_sales.ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END) AS sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END) AS mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END) AS tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END) AS wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END) AS thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END) AS fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END) AS sat_sales | +| | Aggregate: groupBy=[[date_dim.d_week_seq, store_sales.ss_store_sk]], aggr=[[sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Sunday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Monday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Tuesday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Wednesday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Thursday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Friday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = LargeUtf8("Saturday") THEN store_sales.ss_sales_price ELSE Decimal128(None,7,2) END) AS sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)]] | +| | Projection: store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_week_seq, date_dim.d_day_name | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq, d_day_name] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id] | +| | SubqueryAlias: d | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_month_seq >= Int32(1218), date_dim.d_month_seq <= Int32(1229)] | +| physical_plan | SortPreservingMergeExec: [s_store_name1@0 ASC NULLS LAST, s_store_id1@1 ASC NULLS LAST, d_week_seq1@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[s_store_name1@0 ASC NULLS LAST, s_store_id1@1 ASC NULLS LAST, d_week_seq1@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_store_name1@0 as s_store_name1, s_store_id1@2 as s_store_id1, d_week_seq1@1 as d_week_seq1, sun_sales1@3 / sun_sales2@10 as y.sun_sales1 / x.sun_sales2, mon_sales1@4 / mon_sales2@11 as y.mon_sales1 / x.mon_sales2, tue_sales1@5 / tue_sales2@12 as y.tue_sales1 / x.tue_sales2, wed_sales1@6 / wed_sales2@13 as y.wed_sales1 / x.wed_sales2, thu_sales1@7 / thu_sales2@14 as y.thu_sales1 / x.thu_sales2, fri_sales1@8 / fri_sales2@15 as y.fri_sales1 / x.fri_sales2, sat_sales1@9 / sat_sales2@16 as y.sat_sales1 / x.sat_sales2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_store_id1@2, s_store_id2@1), (CAST(y.d_week_seq1 AS Int64)@10, x.d_week_seq2 - Int64(52)@9)], projection=[s_store_name1@0, d_week_seq1@1, s_store_id1@2, sun_sales1@3, mon_sales1@4, tue_sales1@5, wed_sales1@6, thu_sales1@7, fri_sales1@8, sat_sales1@9, sun_sales2@13, mon_sales2@14, tue_sales2@15, wed_sales2@16, thu_sales2@17, fri_sales2@18, sat_sales2@19] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_id1@2, CAST(y.d_week_seq1 AS Int64)@10], 24), input_partitions=24 | +| | ProjectionExec: expr=[s_store_name@9 as s_store_name1, d_week_seq@0 as d_week_seq1, s_store_id@8 as s_store_id1, sun_sales@1 as sun_sales1, mon_sales@2 as mon_sales1, tue_sales@3 as tue_sales1, wed_sales@4 as wed_sales1, thu_sales@5 as thu_sales1, fri_sales@6 as fri_sales1, sat_sales@7 as sat_sales1, CAST(d_week_seq@0 AS Int64) as CAST(y.d_week_seq1 AS Int64)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[d_week_seq@0, sun_sales@1, mon_sales@2, tue_sales@3, wed_sales@4, thu_sales@5, fri_sales@6, sat_sales@7, s_store_id@8, s_store_name@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[d_week_seq@0, sun_sales@2, mon_sales@3, tue_sales@4, wed_sales@5, thu_sales@6, fri_sales@7, sat_sales@8, s_store_id@10, s_store_name@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END)@2 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END)@3 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END)@4 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END)@5 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END)@6 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END)@7 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)@8 as sat_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0, ss_store_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_week_seq@2 as d_week_seq, ss_store_sk@0 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_store_sk@1, ss_sales_price@2, d_week_seq@4, d_day_name@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_week_seq, d_day_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id, s_store_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_month_seq@3 >= 1206 AND d_month_seq@3 <= 1217, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1206 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1217, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_id2@1, x.d_week_seq2 - Int64(52)@9], 24), input_partitions=24 | +| | ProjectionExec: expr=[d_week_seq@0 as d_week_seq2, s_store_id@8 as s_store_id2, sun_sales@1 as sun_sales2, mon_sales@2 as mon_sales2, tue_sales@3 as tue_sales2, wed_sales@4 as wed_sales2, thu_sales@5 as thu_sales2, fri_sales@6 as fri_sales2, sat_sales@7 as sat_sales2, CAST(d_week_seq@0 AS Int64) - 52 as x.d_week_seq2 - Int64(52)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_week_seq@0, d_week_seq@0)], projection=[d_week_seq@0, sun_sales@1, mon_sales@2, tue_sales@3, wed_sales@4, thu_sales@5, fri_sales@6, sat_sales@7, s_store_id@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[d_week_seq@0, sun_sales@2, mon_sales@3, tue_sales@4, wed_sales@5, thu_sales@6, fri_sales@7, sat_sales@8, s_store_id@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk, sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END)@2 as sun_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END)@3 as mon_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END)@4 as tue_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END)@5 as wed_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END)@6 as thu_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END)@7 as fri_sales, sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)@8 as sat_sales] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_week_seq@0 as d_week_seq, ss_store_sk@1 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0, ss_store_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_week_seq@2 as d_week_seq, ss_store_sk@0 as ss_store_sk], aggr=[sum(CASE WHEN date_dim.d_day_name = Utf8("Sunday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Monday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Tuesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Wednesday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Thursday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Friday") THEN store_sales.ss_sales_price ELSE NULL END), sum(CASE WHEN date_dim.d_day_name = Utf8("Saturday") THEN store_sales.ss_sales_price ELSE NULL END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_store_sk@1, ss_sales_price@2, d_week_seq@4, d_day_name@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_week_seq, d_day_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_month_seq@3 >= 1218 AND d_month_seq@3 <= 1229, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1218 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1229, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q5_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q5_explain.snap new file mode 100644 index 0000000000..4d0da42dba --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q5_explain.snap @@ -0,0 +1,187 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q5" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: x.channel ASC NULLS LAST, x.id ASC NULLS LAST, fetch=100 | +| | Projection: x.channel, x.id, sum(x.sales) AS sales, sum(x.returns) AS returns, sum(x.profit) AS profit | +| | Aggregate: groupBy=[[ROLLUP (x.channel, x.id)]], aggr=[[sum(x.sales), sum(x.returns), sum(x.profit)]] | +| | SubqueryAlias: x | +| | Union | +| | Projection: Utf8("store channel") AS channel, LargeUtf8("store") || ssr.s_store_id AS id, ssr.sales, ssr.returns, ssr.profit - ssr.profit_loss AS profit | +| | SubqueryAlias: ssr | +| | Projection: store.s_store_id, sum(salesreturns.sales_price) AS sales, sum(salesreturns.profit) AS profit, sum(salesreturns.return_amt) AS returns, sum(salesreturns.net_loss) AS profit_loss | +| | Aggregate: groupBy=[[store.s_store_id]], aggr=[[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)]] | +| | Projection: salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss, store.s_store_id | +| | Inner Join: salesreturns.store_sk = store.s_store_sk | +| | Projection: salesreturns.store_sk, salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss | +| | Inner Join: salesreturns.date_sk = date_dim.d_date_sk | +| | SubqueryAlias: salesreturns | +| | Union | +| | Projection: store_sales.ss_store_sk AS store_sk, store_sales.ss_sold_date_sk AS date_sk, store_sales.ss_ext_sales_price AS sales_price, store_sales.ss_net_profit AS profit, Decimal128(Some(0),7,2) AS return_amt, Decimal128(Some(0),7,2) AS net_loss | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] | +| | Projection: store_returns.sr_store_sk AS store_sk, store_returns.sr_returned_date_sk AS date_sk, Decimal128(Some(0),7,2) AS sales_price, Decimal128(Some(0),7,2) AS profit, store_returns.sr_return_amt AS return_amt, store_returns.sr_net_loss AS net_loss | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_store_sk, sr_return_amt, sr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-04"), date_dim.d_date <= Date32("2001-08-18")] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id] | +| | Projection: Utf8("catalog channel") AS channel, LargeUtf8("catalog_page") || csr.cp_catalog_page_id AS id, csr.sales, csr.returns, csr.profit - csr.profit_loss AS profit | +| | SubqueryAlias: csr | +| | Projection: catalog_page.cp_catalog_page_id, sum(salesreturns.sales_price) AS sales, sum(salesreturns.profit) AS profit, sum(salesreturns.return_amt) AS returns, sum(salesreturns.net_loss) AS profit_loss | +| | Aggregate: groupBy=[[catalog_page.cp_catalog_page_id]], aggr=[[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)]] | +| | Projection: salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss, catalog_page.cp_catalog_page_id | +| | Inner Join: salesreturns.page_sk = catalog_page.cp_catalog_page_sk | +| | Projection: salesreturns.page_sk, salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss | +| | Inner Join: salesreturns.date_sk = date_dim.d_date_sk | +| | SubqueryAlias: salesreturns | +| | Union | +| | Projection: catalog_sales.cs_catalog_page_sk AS page_sk, catalog_sales.cs_sold_date_sk AS date_sk, catalog_sales.cs_ext_sales_price AS sales_price, catalog_sales.cs_net_profit AS profit, Decimal128(Some(0),7,2) AS return_amt, Decimal128(Some(0),7,2) AS net_loss | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_catalog_page_sk, cs_ext_sales_price, cs_net_profit] | +| | Projection: catalog_returns.cr_catalog_page_sk AS page_sk, catalog_returns.cr_returned_date_sk AS date_sk, Decimal128(Some(0),7,2) AS sales_price, Decimal128(Some(0),7,2) AS profit, catalog_returns.cr_return_amount AS return_amt, catalog_returns.cr_net_loss AS net_loss | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_catalog_page_sk, cr_return_amount, cr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-04"), date_dim.d_date <= Date32("2001-08-18")] | +| | BytesProcessedNode | +| | TableScan: catalog_page projection=[cp_catalog_page_sk, cp_catalog_page_id] | +| | Projection: Utf8("web channel") AS channel, LargeUtf8("web_site") || wsr.web_site_id AS id, wsr.sales, wsr.returns, wsr.profit - wsr.profit_loss AS profit | +| | SubqueryAlias: wsr | +| | Projection: web_site.web_site_id, sum(salesreturns.sales_price) AS sales, sum(salesreturns.profit) AS profit, sum(salesreturns.return_amt) AS returns, sum(salesreturns.net_loss) AS profit_loss | +| | Aggregate: groupBy=[[web_site.web_site_id]], aggr=[[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)]] | +| | Projection: salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss, web_site.web_site_id | +| | Inner Join: salesreturns.wsr_web_site_sk = web_site.web_site_sk | +| | Projection: salesreturns.wsr_web_site_sk, salesreturns.sales_price, salesreturns.profit, salesreturns.return_amt, salesreturns.net_loss | +| | Inner Join: salesreturns.date_sk = date_dim.d_date_sk | +| | SubqueryAlias: salesreturns | +| | Union | +| | Projection: web_sales.ws_web_site_sk AS wsr_web_site_sk, web_sales.ws_sold_date_sk AS date_sk, web_sales.ws_ext_sales_price AS sales_price, web_sales.ws_net_profit AS profit, Decimal128(Some(0),7,2) AS return_amt, Decimal128(Some(0),7,2) AS net_loss | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_web_site_sk, ws_ext_sales_price, ws_net_profit] | +| | Projection: web_sales.ws_web_site_sk AS wsr_web_site_sk, web_returns.wr_returned_date_sk AS date_sk, Decimal128(Some(0),7,2) AS sales_price, Decimal128(Some(0),7,2) AS profit, web_returns.wr_return_amt AS return_amt, web_returns.wr_net_loss AS net_loss | +| | Left Join: web_returns.wr_item_sk = web_sales.ws_item_sk, web_returns.wr_order_number = web_sales.ws_order_number | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_returned_date_sk, wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_item_sk, ws_web_site_sk, ws_order_number] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-04"), date_dim.d_date <= Date32("2001-08-18")] | +| | BytesProcessedNode | +| | TableScan: web_site projection=[web_site_sk, web_site_id] | +| physical_plan | SortPreservingMergeExec: [channel@0 ASC NULLS LAST, id@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[channel@0 ASC NULLS LAST, id@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[channel@0 as channel, id@1 as id, sum(x.sales)@3 as sales, sum(x.returns)@4 as returns, sum(x.profit)@5 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, id@1 as id, __grouping_id@2 as __grouping_id], aggr=[sum(x.sales), sum(x.returns), sum(x.profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([channel@0, id@1, __grouping_id@2], 24), input_partitions=72 | +| | AggregateExec: mode=Partial, gby=[(NULL as channel, NULL as id), (channel@0 as channel, NULL as id), (channel@0 as channel, id@1 as id)], aggr=[sum(x.sales), sum(x.returns), sum(x.profit)] | +| | UnionExec | +| | ProjectionExec: expr=[store channel as channel, store || s_store_id@0 as id, sales@1 as sales, returns@3 as returns, profit@2 - profit_loss@4 as profit] | +| | ProjectionExec: expr=[s_store_id@0 as s_store_id, sum(salesreturns.sales_price)@1 as sales, sum(salesreturns.profit)@2 as profit, sum(salesreturns.return_amt)@3 as returns, sum(salesreturns.net_loss)@4 as profit_loss] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_store_id@0 as s_store_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_store_id@4 as s_store_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(store_sk@0, s_store_sk@0)], projection=[sales_price@1, profit@2, return_amt@3, net_loss@4, s_store_id@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(date_sk@1, d_date_sk@0)], projection=[store_sk@0, sales_price@2, profit@3, return_amt@4, net_loss@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([date_sk@1], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[ss_store_sk@1 as store_sk, ss_sold_date_sk@0 as date_sk, ss_ext_sales_price@2 as sales_price, ss_net_profit@3 as profit, Some(0),7,2 as return_amt, Some(0),7,2 as net_loss] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] | +| | ProjectionExec: expr=[sr_store_sk@1 as store_sk, sr_returned_date_sk@0 as date_sk, Some(0),7,2 as sales_price, Some(0),7,2 as profit, sr_return_amt@2 as return_amt, sr_net_loss@3 as net_loss] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_store_sk, sr_return_amt, sr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-04 AND d_date@2 <= 2001-08-18, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-04 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-08-18, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id] | +| | ProjectionExec: expr=[catalog channel as channel, catalog_page || cp_catalog_page_id@0 as id, sales@1 as sales, returns@3 as returns, profit@2 - profit_loss@4 as profit] | +| | ProjectionExec: expr=[cp_catalog_page_id@0 as cp_catalog_page_id, sum(salesreturns.sales_price)@1 as sales, sum(salesreturns.profit)@2 as profit, sum(salesreturns.return_amt)@3 as returns, sum(salesreturns.net_loss)@4 as profit_loss] | +| | AggregateExec: mode=FinalPartitioned, gby=[cp_catalog_page_id@0 as cp_catalog_page_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cp_catalog_page_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cp_catalog_page_id@4 as cp_catalog_page_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(page_sk@0, cp_catalog_page_sk@0)], projection=[sales_price@1, profit@2, return_amt@3, net_loss@4, cp_catalog_page_id@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([page_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(date_sk@1, d_date_sk@0)], projection=[page_sk@0, sales_price@2, profit@3, return_amt@4, net_loss@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([date_sk@1], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[cs_catalog_page_sk@1 as page_sk, cs_sold_date_sk@0 as date_sk, cs_ext_sales_price@2 as sales_price, cs_net_profit@3 as profit, Some(0),7,2 as return_amt, Some(0),7,2 as net_loss] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_catalog_page_sk, cs_ext_sales_price, cs_net_profit] | +| | ProjectionExec: expr=[cr_catalog_page_sk@1 as page_sk, cr_returned_date_sk@0 as date_sk, Some(0),7,2 as sales_price, Some(0),7,2 as profit, cr_return_amount@2 as return_amt, cr_net_loss@3 as net_loss] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_returned_date_sk, cr_catalog_page_sk, cr_return_amount, cr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-04 AND d_date@2 <= 2001-08-18, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-04 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-08-18, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cp_catalog_page_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/catalog_page/catalog_page.parquet]]}, projection=[cp_catalog_page_sk, cp_catalog_page_id] | +| | ProjectionExec: expr=[web channel as channel, web_site || web_site_id@0 as id, sales@1 as sales, returns@3 as returns, profit@2 - profit_loss@4 as profit] | +| | ProjectionExec: expr=[web_site_id@0 as web_site_id, sum(salesreturns.sales_price)@1 as sales, sum(salesreturns.profit)@2 as profit, sum(salesreturns.return_amt)@3 as returns, sum(salesreturns.net_loss)@4 as profit_loss] | +| | AggregateExec: mode=FinalPartitioned, gby=[web_site_id@0 as web_site_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([web_site_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[web_site_id@4 as web_site_id], aggr=[sum(salesreturns.sales_price), sum(salesreturns.profit), sum(salesreturns.return_amt), sum(salesreturns.net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wsr_web_site_sk@0, web_site_sk@0)], projection=[sales_price@1, profit@2, return_amt@3, net_loss@4, web_site_id@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wsr_web_site_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(date_sk@1, d_date_sk@0)], projection=[wsr_web_site_sk@0, sales_price@2, profit@3, return_amt@4, net_loss@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([date_sk@1], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[ws_web_site_sk@1 as wsr_web_site_sk, ws_sold_date_sk@0 as date_sk, ws_ext_sales_price@2 as sales_price, ws_net_profit@3 as profit, Some(0),7,2 as return_amt, Some(0),7,2 as net_loss] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_web_site_sk, ws_ext_sales_price, ws_net_profit] | +| | ProjectionExec: expr=[ws_web_site_sk@6 as wsr_web_site_sk, wr_returned_date_sk@0 as date_sk, Some(0),7,2 as sales_price, Some(0),7,2 as profit, wr_return_amt@3 as return_amt, wr_net_loss@4 as net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(wr_item_sk@1, ws_item_sk@0), (wr_order_number@2, ws_order_number@2)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_item_sk@1, wr_order_number@2], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_returned_date_sk, wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0, ws_order_number@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_item_sk, ws_web_site_sk, ws_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-04 AND d_date@2 <= 2001-08-18, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-04 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-08-18, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([web_site_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_site/web_site.parquet]]}, projection=[web_site_sk, web_site_id] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q60_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q60_explain.snap new file mode 100644 index 0000000000..0a60aa4a41 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q60_explain.snap @@ -0,0 +1,202 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q60" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: tmp1.i_item_id ASC NULLS LAST, total_sales ASC NULLS LAST, fetch=100 | +| | Projection: tmp1.i_item_id, sum(tmp1.total_sales) AS total_sales | +| | Aggregate: groupBy=[[tmp1.i_item_id]], aggr=[[sum(tmp1.total_sales)]] | +| | SubqueryAlias: tmp1 | +| | Union | +| | SubqueryAlias: ss | +| | Projection: item.i_item_id, sum(store_sales.ss_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | LeftSemi Join: item.i_item_id = __correlated_sq_1.i_item_id | +| | Projection: store_sales.ss_ext_sales_price, item.i_item_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001), date_dim.d_moy = Int32(10)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | SubqueryAlias: cs | +| | Projection: item.i_item_id, sum(catalog_sales.cs_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price)]] | +| | LeftSemi Join: item.i_item_id = __correlated_sq_2.i_item_id | +| | Projection: catalog_sales.cs_ext_sales_price, item.i_item_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price | +| | Inner Join: catalog_sales.cs_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: catalog_sales.cs_bill_addr_sk, catalog_sales.cs_item_sk, catalog_sales.cs_ext_sales_price | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001), date_dim.d_moy = Int32(10)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | SubqueryAlias: __correlated_sq_2 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | SubqueryAlias: ws | +| | Projection: item.i_item_id, sum(web_sales.ws_ext_sales_price) AS total_sales | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(web_sales.ws_ext_sales_price)]] | +| | LeftSemi Join: item.i_item_id = __correlated_sq_3.i_item_id | +| | Projection: web_sales.ws_ext_sales_price, item.i_item_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_ext_sales_price | +| | Inner Join: web_sales.ws_bill_addr_sk = customer_address.ca_address_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_bill_addr_sk, web_sales.ws_ext_sales_price | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001), date_dim.d_moy = Int32(10)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | SubqueryAlias: __correlated_sq_3 | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST, total_sales@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST, total_sales@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(tmp1.total_sales)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(tmp1.total_sales)] | +| | InterleaveExec | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(store_sales.ss_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_item_id@1, i_item_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_ext_sales_price@1, i_item_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_addr_sk@2, ss_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_addr_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001 AND d_moy@8 = 10, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 10 AND 10 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-600),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(catalog_sales.cs_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_sales.cs_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_item_id@1, i_item_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_ext_sales_price@1, i_item_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_addr_sk@0, ca_address_sk@0)], projection=[cs_item_sk@1, cs_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_bill_addr_sk@1, cs_item_sk@2, cs_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_addr_sk, cs_item_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001 AND d_moy@8 = 10, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 10 AND 10 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-600),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, sum(web_sales.ws_ext_sales_price)@1 as total_sales] | +| | AggregateExec: mode=SinglePartitioned, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_sales.ws_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(i_item_id@1, i_item_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_ext_sales_price@1, i_item_id@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_addr_sk@1, ca_address_sk@0)], projection=[ws_item_sk@0, ws_ext_sales_price@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_bill_addr_sk@2, ws_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_addr_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001 AND d_moy@8 = 10, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 10 AND 10 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-600),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q61_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q61_explain.snap new file mode 100644 index 0000000000..182e80c015 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q61_explain.snap @@ -0,0 +1,180 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q61" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: promotional_sales.promotions ASC NULLS LAST, all_sales.total ASC NULLS LAST, fetch=100 | +| | Projection: promotional_sales.promotions, all_sales.total, CAST(promotional_sales.promotions AS Decimal128(15, 4)) / CAST(all_sales.total AS Decimal128(15, 4)) * Decimal128(Some(100),20,0) AS promotional_sales.promotions / all_sales.total * Int64(100) | +| | Cross Join: | +| | SubqueryAlias: promotional_sales | +| | Projection: sum(store_sales.ss_ext_sales_price) AS promotions | +| | Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price, customer.c_current_addr_sk | +| | Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_promo_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_dmail = LargeUtf8("Y") OR promotion.p_channel_email = LargeUtf8("Y") OR promotion.p_channel_tv = LargeUtf8("Y")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy = Int32(11)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_category = LargeUtf8("Sports")] | +| | SubqueryAlias: all_sales | +| | Projection: sum(store_sales.ss_ext_sales_price) AS total | +| | Aggregate: groupBy=[[]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ext_sales_price, customer.c_current_addr_sk | +| | Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_ext_sales_price | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy = Int32(11)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_category = LargeUtf8("Sports")] | +| physical_plan | SortExec: TopK(fetch=100), expr=[promotions@0 ASC NULLS LAST, total@1 ASC NULLS LAST], preserve_partitioning=[false] | +| | ProjectionExec: expr=[promotions@0 as promotions, total@1 as total, CAST(promotions@0 AS Decimal128(15, 4)) / CAST(total@1 AS Decimal128(15, 4)) * Some(100),20,0 as promotional_sales.promotions / all_sales.total * Int64(100)] | +| | CrossJoinExec | +| | ProjectionExec: expr=[sum(store_sales.ss_ext_sales_price)@0 as promotions] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_ext_sales_price@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@2, ca_address_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@2, c_current_addr_sk@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_customer_sk@2, ss_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_promo_sk@3, p_promo_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_ext_sales_price@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_promo_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@3, s_store_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_promo_sk@4, ss_ext_sales_price@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_promo_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_gmt_offset@27 = Some(-600),5,2, pruning_predicate=s_gmt_offset_null_count@2 != s_gmt_offset_row_count@3 AND s_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= s_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk], predicate=p_channel_dmail@8 = Y OR p_channel_email@9 = Y OR p_channel_tv@11 = Y, pruning_predicate=p_channel_dmail_null_count@2 != p_channel_dmail_row_count@3 AND p_channel_dmail_min@0 <= Y AND Y <= p_channel_dmail_max@1 OR p_channel_email_null_count@6 != p_channel_email_row_count@7 AND p_channel_email_min@4 <= Y AND Y <= p_channel_email_max@5 OR p_channel_tv_null_count@10 != p_channel_tv_row_count@11 AND p_channel_tv_min@8 <= Y AND Y <= p_channel_tv_max@9, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 = 11, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 11 AND 11 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-600),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_category@12 = Sports, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Sports AND Sports <= i_category_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[sum(store_sales.ss_ext_sales_price)@0 as total] | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_ext_sales_price@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@2, ca_address_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_item_sk@0, ss_ext_sales_price@2, c_current_addr_sk@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_customer_sk@2, ss_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@3, s_store_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_ext_sales_price@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_store_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_gmt_offset@27 = Some(-600),5,2, pruning_predicate=s_gmt_offset_null_count@2 != s_gmt_offset_row_count@3 AND s_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= s_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 = 11, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 11 AND 11 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-600),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_category@12 = Sports, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Sports AND Sports <= i_category_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q62_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q62_explain.snap new file mode 100644 index 0000000000..b49870fe1e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q62_explain.snap @@ -0,0 +1,76 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q62" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) ASC NULLS LAST, ship_mode.sm_type ASC NULLS LAST, web_site.web_name ASC NULLS LAST, fetch=100 | +| | Projection: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), ship_mode.sm_type, web_site.web_name, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days | +| | Aggregate: groupBy=[[substr(warehouse.w_warehouse_name, Int64(1), Int64(20)), ship_mode.sm_type, web_site.web_name]], aggr=[[sum(CASE WHEN __common_expr_1 <= Int32(30) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(30) AND __common_expr_1 <= Int32(60) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(60) AND __common_expr_1 <= Int32(90) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(90) AND __common_expr_1 <= Int32(120) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(120) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] | +| | Projection: web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk AS __common_expr_1, warehouse.w_warehouse_name, ship_mode.sm_type, web_site.web_name | +| | Inner Join: web_sales.ws_ship_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_ship_date_sk, warehouse.w_warehouse_name, ship_mode.sm_type, web_site.web_name | +| | Inner Join: web_sales.ws_web_site_sk = web_site.web_site_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_ship_date_sk, web_sales.ws_web_site_sk, warehouse.w_warehouse_name, ship_mode.sm_type | +| | Inner Join: web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_ship_date_sk, web_sales.ws_web_site_sk, web_sales.ws_ship_mode_sk, warehouse.w_warehouse_name | +| | Inner Join: web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_ship_date_sk, ws_web_site_sk, ws_ship_mode_sk, ws_warehouse_sk] | +| | BytesProcessedNode | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | BytesProcessedNode | +| | TableScan: ship_mode projection=[sm_ship_mode_sk, sm_type] | +| | BytesProcessedNode | +| | TableScan: web_site projection=[web_site_sk, web_name] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1217), date_dim.d_month_seq <= Int32(1228)] | +| physical_plan | SortPreservingMergeExec: [substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 ASC NULLS LAST, sm_type@1 ASC NULLS LAST, web_name@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 ASC NULLS LAST, sm_type@1 ASC NULLS LAST, web_name@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 as substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), sm_type@1 as sm_type, web_name@2 as web_name, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END)@3 as 30 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END)@4 as 31-60 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END)@5 as 61-90 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END)@6 as 91-120 days, sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)@7 as >120 days] | +| | AggregateExec: mode=FinalPartitioned, gby=[substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 as substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), sm_type@1 as sm_type, web_name@2 as web_name], aggr=[sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0, sm_type@1, web_name@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[substr(w_warehouse_name@1, 1, 20) as substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), sm_type@2 as sm_type, web_name@3 as web_name], aggr=[sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(30) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(60) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(90) AND web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN web_sales.ws_ship_date_sk - web_sales.ws_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] | +| | ProjectionExec: expr=[ws_ship_date_sk@1 - ws_sold_date_sk@0 as __common_expr_1, w_warehouse_name@2 as w_warehouse_name, sm_type@3 as sm_type, web_name@4 as web_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_date_sk@1, d_date_sk@0)], projection=[ws_sold_date_sk@0, ws_ship_date_sk@1, w_warehouse_name@2, sm_type@3, web_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_date_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_site_sk@2, web_site_sk@0)], projection=[ws_sold_date_sk@0, ws_ship_date_sk@1, w_warehouse_name@3, sm_type@4, web_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_site_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_mode_sk@3, sm_ship_mode_sk@0)], projection=[ws_sold_date_sk@0, ws_ship_date_sk@1, ws_web_site_sk@2, w_warehouse_name@4, sm_type@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_mode_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_warehouse_sk@4, w_warehouse_sk@0)], projection=[ws_sold_date_sk@0, ws_ship_date_sk@1, ws_web_site_sk@2, ws_ship_mode_sk@3, w_warehouse_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_warehouse_sk@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_ship_date_sk, ws_web_site_sk, ws_ship_mode_sk, ws_warehouse_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/warehouse/warehouse.parquet]]}, projection=[w_warehouse_sk, w_warehouse_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sm_ship_mode_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/ship_mode/ship_mode.parquet]]}, projection=[sm_ship_mode_sk, sm_type] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([web_site_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_site/web_site.parquet]]}, projection=[web_site_sk, web_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1217 AND d_month_seq@3 <= 1228, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1217 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1228, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q63_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q63_explain.snap new file mode 100644 index 0000000000..a5787027f5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q63_explain.snap @@ -0,0 +1,73 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q63" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: tmp1.i_manager_id ASC NULLS LAST, tmp1.avg_monthly_sales ASC NULLS LAST, tmp1.sum_sales ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: tmp1 | +| | Projection: item.i_manager_id, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales | +| | Filter: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING > Decimal128(Some(0),21,6) THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(None,32,10) END > Decimal128(Some(1000000000),32,10) | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Projection: item.i_manager_id, sum(store_sales.ss_sales_price) | +| | Aggregate: groupBy=[[item.i_manager_id, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: item.i_manager_id, store_sales.ss_sales_price, date_dim.d_moy | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: item.i_manager_id, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_moy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_manager_id, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: item.i_item_sk = store_sales.ss_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_manager_id], full_filters=[(item.i_category = LargeUtf8("Books") OR item.i_category = LargeUtf8("Children") OR item.i_category = LargeUtf8("Electronics")) AND item.i_class IN ([LargeUtf8("personal"), LargeUtf8("portable"), LargeUtf8("reference"), LargeUtf8("self-help")]) AND item.i_brand IN ([LargeUtf8("scholaramalgamalg #14"), LargeUtf8("scholaramalgamalg #7"), LargeUtf8("exportiunivamalg #9"), LargeUtf8("scholaramalgamalg #9")]) OR (item.i_category = LargeUtf8("Women") OR item.i_category = LargeUtf8("Music") OR item.i_category = LargeUtf8("Men")) AND item.i_class IN ([LargeUtf8("accessories"), LargeUtf8("classical"), LargeUtf8("fragrances"), LargeUtf8("pants")]) AND item.i_brand IN ([LargeUtf8("amalgimporto #1"), LargeUtf8("edu packscholar #1"), LargeUtf8("exportiimporto #1"), LargeUtf8("importoamalg #1")])] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_moy], full_filters=[date_dim.d_month_seq IN ([Int32(1181), Int32(1182), Int32(1183), Int32(1184), Int32(1185), Int32(1186), Int32(1187), Int32(1188), Int32(1189), Int32(1190), Int32(1191), Int32(1192)])] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk] | +| physical_plan | SortPreservingMergeExec: [i_manager_id@0 ASC NULLS LAST, avg_monthly_sales@2 ASC NULLS LAST, sum_sales@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_manager_id@0 ASC NULLS LAST, avg_monthly_sales@2 ASC NULLS LAST, sum_sales@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_manager_id@0 as i_manager_id, sum(store_sales.ss_sales_price)@1 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 as avg_monthly_sales] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 > Some(0),21,6 THEN abs(sum(store_sales.ss_sales_price)@1 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@2 END > Some(1000000000),32,10 | +| | WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_manager_id] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_manager_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manager_id@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_manager_id@0 as i_manager_id, sum(store_sales.ss_sales_price)@2 as sum(store_sales.ss_sales_price)] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_manager_id@0 as i_manager_id, d_moy@1 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_manager_id@0, d_moy@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_manager_id@0 as i_manager_id, d_moy@2 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[i_manager_id@0, ss_sales_price@2, d_moy@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@1, d_date_sk@0)], projection=[i_manager_id@0, ss_store_sk@2, ss_sales_price@3, d_moy@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_manager_id@1, ss_sold_date_sk@2, ss_store_sk@4, ss_sales_price@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_manager_id], predicate=(i_category@12 = Books OR i_category@12 = Children OR i_category@12 = Electronics) AND Use i_class@10 IN (SET) ([Literal { value: LargeUtf8("personal") }, Literal { value: LargeUtf8("portable") }, Literal { value: LargeUtf8("reference") }, Literal { value: LargeUtf8("self-help") }]) AND Use i_brand@8 IN (SET) ([Literal { value: LargeUtf8("scholaramalgamalg #14") }, Literal { value: LargeUtf8("scholaramalgamalg #7") }, Literal { value: LargeUtf8("exportiunivamalg #9") }, Literal { value: LargeUtf8("scholaramalgamalg #9") }]) OR (i_category@12 = Women OR i_category@12 = Music OR i_category@12 = Men) AND Use i_class@10 IN (SET) ([Literal { value: LargeUtf8("accessories") }, Literal { value: LargeUtf8("classical") }, Literal { value: LargeUtf8("fragrances") }, Literal { value: LargeUtf8("pants") }]) AND Use i_brand@8 IN (SET) ([Literal { value: LargeUtf8("amalgimporto #1") }, Literal { value: LargeUtf8("edu packscholar #1") }, Literal { value: LargeUtf8("exportiimporto #1") }, Literal { value: LargeUtf8("importoamalg #1") }]), pruning_predicate=(i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Books AND Books <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Children AND Children <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Electronics AND Electronics <= i_category_max@1) AND (i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= personal AND personal <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= portable AND portable <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= reference AND reference <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= self-help AND self-help <= i_class_max@5) AND (i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= scholaramalgamalg #14 AND scholaramalgamalg #14 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= scholaramalgamalg #7 AND scholaramalgamalg #7 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= exportiunivamalg #9 AND exportiunivamalg #9 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= scholaramalgamalg #9 AND scholaramalgamalg #9 <= i_brand_max@9) OR (i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Women AND Women <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Music AND Music <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1) AND (i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= accessories AND accessories <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= classical AND classical <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= fragrances AND fragrances <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= pants AND pants <= i_class_max@5) AND (i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= amalgimporto #1 AND amalgimporto #1 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= edu packscholar #1 AND edu packscholar #1 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= exportiimporto #1 AND exportiimporto #1 <= i_brand_max@9 OR i_brand_null_count@10 != i_brand_row_count@11 AND i_brand_min@8 <= importoamalg #1 AND importoamalg #1 <= i_brand_max@9), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_moy], predicate=Use d_month_seq@3 IN (SET) ([Literal { value: Int32(1181) }, Literal { value: Int32(1182) }, Literal { value: Int32(1183) }, Literal { value: Int32(1184) }, Literal { value: Int32(1185) }, Literal { value: Int32(1186) }, Literal { value: Int32(1187) }, Literal { value: Int32(1188) }, Literal { value: Int32(1189) }, Literal { value: Int32(1190) }, Literal { value: Int32(1191) }, Literal { value: Int32(1192) }]), pruning_predicate=d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1181 AND 1181 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1182 AND 1182 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1183 AND 1183 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1184 AND 1184 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1185 AND 1185 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1186 AND 1186 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1187 AND 1187 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1188 AND 1188 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1189 AND 1189 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1190 AND 1190 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1191 AND 1191 <= d_month_seq_max@1 OR d_month_seq_null_count@2 != d_month_seq_row_count@3 AND d_month_seq_min@0 <= 1192 AND 1192 <= d_month_seq_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q64_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q64_explain.snap new file mode 100644 index 0000000000..af2946865a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q64_explain.snap @@ -0,0 +1,551 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q64" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: cs1.product_name, cs1.store_name, cs1.store_zip, cs1.b_street_number, cs1.b_street_name, cs1.b_city, cs1.b_zip, cs1.c_street_number, cs1.c_street_name, cs1.c_city, cs1.c_zip, cs1.syear, cs1.cnt, s11, s21, s31, s12, s22, s32, cs2.syear, cs2.cnt | +| | Sort: cs1.product_name ASC NULLS LAST, cs1.store_name ASC NULLS LAST, cs2.cnt ASC NULLS LAST, cs1.s1 ASC NULLS LAST, cs2.s1 ASC NULLS LAST | +| | Projection: cs1.product_name, cs1.store_name, cs1.store_zip, cs1.b_street_number, cs1.b_street_name, cs1.b_city, cs1.b_zip, cs1.c_street_number, cs1.c_street_name, cs1.c_city, cs1.c_zip, cs1.syear, cs1.cnt, cs1.s1 AS s11, cs1.s2 AS s21, cs1.s3 AS s31, cs2.s1 AS s12, cs2.s2 AS s22, cs2.s3 AS s32, cs2.syear, cs2.cnt, cs1.s1, cs2.s1 | +| | Inner Join: cs1.item_sk = cs2.item_sk, cs1.store_name = cs2.store_name, cs1.store_zip = cs2.store_zip Filter: cs2.cnt <= cs1.cnt | +| | SubqueryAlias: cs1 | +| | SubqueryAlias: cross_sales | +| | Projection: item.i_product_name AS product_name, item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, ad1.ca_street_number AS b_street_number, ad1.ca_street_name AS b_street_name, ad1.ca_city AS b_city, ad1.ca_zip AS b_zip, ad2.ca_street_number AS c_street_number, ad2.ca_street_name AS c_street_name, ad2.ca_city AS c_city, ad2.ca_zip AS c_zip, d1.d_year AS syear, count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 | +| | Aggregate: groupBy=[[item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year]], aggr=[[count(Int64(1)) AS count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)]] | +| | Projection: store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, d2.d_year, d3.d_year, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, item.i_item_sk, item.i_product_name | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip | +| | Inner Join: hd2.hd_income_band_sk = ib2.ib_income_band_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip | +| | Inner Join: hd1.hd_income_band_sk = ib1.ib_income_band_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip | +| | Inner Join: customer.c_current_addr_sk = ad2.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip | +| | Inner Join: store_sales.ss_addr_sk = ad1.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk | +| | Inner Join: customer.c_current_hdemo_sk = hd2.hd_demo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk | +| | Inner Join: store_sales.ss_hdemo_sk = hd1.hd_demo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year | +| | Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year | +| | Inner Join: customer.c_current_cdemo_sk = cd2.cd_demo_sk Filter: cd2.cd_marital_status != cd1.cd_marital_status | +| | Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, cd1.cd_marital_status | +| | Inner Join: store_sales.ss_cdemo_sk = cd1.cd_demo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year | +| | Inner Join: customer.c_first_shipto_date_sk = d3.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, d2.d_year | +| | Inner Join: customer.c_first_sales_date_sk = d2.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, customer.c_first_sales_date_sk | +| | Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_item_sk = cs_ui.cs_item_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] | +| | SubqueryAlias: cs_ui | +| | Projection: catalog_sales.cs_item_sk | +| | Filter: CAST(sum(catalog_sales.cs_ext_list_price) AS Decimal128(38, 2)) > Decimal128(Some(2),20,0) * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit) | +| | Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)]] | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_list_price, catalog_returns.cr_refunded_cash, catalog_returns.cr_reversed_charge, catalog_returns.cr_store_credit | +| | Inner Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_item_sk, cs_order_number, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_zip] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] | +| | SubqueryAlias: d2 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: d3 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: cd1 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | SubqueryAlias: cd2 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk] | +| | SubqueryAlias: hd1 | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: hd2 | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: ad1 | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ad2 | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ib1 | +| | BytesProcessedNode | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | SubqueryAlias: ib2 | +| | BytesProcessedNode | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_product_name], full_filters=[item.i_color IN ([LargeUtf8("light"), LargeUtf8("cyan"), LargeUtf8("burnished"), LargeUtf8("green"), LargeUtf8("almond"), LargeUtf8("smoke")]), item.i_current_price >= Decimal128(Some(2200),7,2), item.i_current_price <= Decimal128(Some(3200),7,2), item.i_current_price >= Decimal128(Some(2300),7,2), item.i_current_price <= Decimal128(Some(3700),7,2)] | +| | SubqueryAlias: cs2 | +| | SubqueryAlias: cross_sales | +| | Projection: item.i_item_sk AS item_sk, store.s_store_name AS store_name, store.s_zip AS store_zip, d1.d_year AS syear, count(*) AS cnt, sum(store_sales.ss_wholesale_cost) AS s1, sum(store_sales.ss_list_price) AS s2, sum(store_sales.ss_coupon_amt) AS s3 | +| | Aggregate: groupBy=[[item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year]], aggr=[[count(Int64(1)) AS count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)]] | +| | Projection: store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, d2.d_year, d3.d_year, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, item.i_item_sk, item.i_product_name | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip | +| | Inner Join: hd2.hd_income_band_sk = ib2.ib_income_band_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip | +| | Inner Join: hd1.hd_income_band_sk = ib1.ib_income_band_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip | +| | Inner Join: customer.c_current_addr_sk = ad2.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip | +| | Inner Join: store_sales.ss_addr_sk = ad1.ca_address_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk, hd2.hd_income_band_sk | +| | Inner Join: customer.c_current_hdemo_sk = hd2.hd_demo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, hd1.hd_income_band_sk | +| | Inner Join: store_sales.ss_hdemo_sk = hd1.hd_demo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year | +| | Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year | +| | Inner Join: customer.c_current_cdemo_sk = cd2.cd_demo_sk Filter: cd2.cd_marital_status != cd1.cd_marital_status | +| | Projection: store_sales.ss_item_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year, cd1.cd_marital_status | +| | Inner Join: store_sales.ss_cdemo_sk = cd1.cd_demo_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, d2.d_year, d3.d_year | +| | Inner Join: customer.c_first_shipto_date_sk = d3.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, d2.d_year | +| | Inner Join: customer.c_first_sales_date_sk = d2.d_date_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk, customer.c_first_shipto_date_sk, customer.c_first_sales_date_sk | +| | Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year, store.s_store_name, store.s_zip | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt, d1.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_item_sk = cs_ui.cs_item_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_cdemo_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_wholesale_cost, store_sales.ss_list_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] | +| | SubqueryAlias: cs_ui | +| | Projection: catalog_sales.cs_item_sk | +| | Filter: CAST(sum(catalog_sales.cs_ext_list_price) AS Decimal128(38, 2)) > Decimal128(Some(2),20,0) * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit) | +| | Aggregate: groupBy=[[catalog_sales.cs_item_sk]], aggr=[[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)]] | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_ext_list_price, catalog_returns.cr_refunded_cash, catalog_returns.cr_reversed_charge, catalog_returns.cr_store_credit | +| | Inner Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_item_sk, cs_order_number, cs_ext_list_price] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_zip] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] | +| | SubqueryAlias: d2 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: d3 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: cd1 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | SubqueryAlias: cd2 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk] | +| | SubqueryAlias: hd1 | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: hd2 | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | SubqueryAlias: ad1 | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ad2 | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | SubqueryAlias: ib1 | +| | BytesProcessedNode | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | SubqueryAlias: ib2 | +| | BytesProcessedNode | +| | TableScan: income_band projection=[ib_income_band_sk] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_product_name], full_filters=[item.i_color IN ([LargeUtf8("light"), LargeUtf8("cyan"), LargeUtf8("burnished"), LargeUtf8("green"), LargeUtf8("almond"), LargeUtf8("smoke")]), item.i_current_price >= Decimal128(Some(2200),7,2), item.i_current_price <= Decimal128(Some(3200),7,2), item.i_current_price >= Decimal128(Some(2300),7,2), item.i_current_price <= Decimal128(Some(3700),7,2)] | +| physical_plan | ProjectionExec: expr=[product_name@0 as product_name, store_name@1 as store_name, store_zip@2 as store_zip, b_street_number@3 as b_street_number, b_street_name@4 as b_street_name, b_city@5 as b_city, b_zip@6 as b_zip, c_street_number@7 as c_street_number, c_street_name@8 as c_street_name, c_city@9 as c_city, c_zip@10 as c_zip, syear@11 as syear, cnt@12 as cnt, s11@13 as s11, s21@14 as s21, s31@15 as s31, s12@16 as s12, s22@17 as s22, s32@18 as s32, syear@19 as syear, cnt@20 as cnt] | +| | SortPreservingMergeExec: [product_name@0 ASC NULLS LAST, store_name@1 ASC NULLS LAST, cnt@20 ASC NULLS LAST, s1@21 ASC NULLS LAST, s1@22 ASC NULLS LAST] | +| | SortExec: expr=[product_name@0 ASC NULLS LAST, store_name@1 ASC NULLS LAST, cnt@20 ASC NULLS LAST, s1@21 ASC NULLS LAST, s1@22 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[product_name@0 as product_name, store_name@1 as store_name, store_zip@2 as store_zip, b_street_number@3 as b_street_number, b_street_name@4 as b_street_name, b_city@5 as b_city, b_zip@6 as b_zip, c_street_number@7 as c_street_number, c_street_name@8 as c_street_name, c_city@9 as c_city, c_zip@10 as c_zip, syear@11 as syear, cnt@12 as cnt, s1@13 as s11, s2@14 as s21, s3@15 as s31, s1@18 as s12, s2@19 as s22, s3@20 as s32, syear@16 as syear, cnt@17 as cnt, s1@13 as s1, s1@18 as s1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_sk@1, item_sk@0), (store_name@2, store_name@1), (store_zip@3, store_zip@2)], filter=cnt@1 <= cnt@0, projection=[product_name@0, store_name@2, store_zip@3, b_street_number@4, b_street_name@5, b_city@6, b_zip@7, c_street_number@8, c_street_name@9, c_city@10, c_zip@11, syear@12, cnt@13, s1@14, s2@15, s3@16, syear@20, cnt@21, s1@22, s2@23, s3@24] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@1, store_name@2, store_zip@3], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_product_name@0 as product_name, i_item_sk@1 as item_sk, s_store_name@2 as store_name, s_zip@3 as store_zip, ca_street_number@4 as b_street_number, ca_street_name@5 as b_street_name, ca_city@6 as b_city, ca_zip@7 as b_zip, ca_street_number@8 as c_street_number, ca_street_name@9 as c_street_name, ca_city@10 as c_city, ca_zip@11 as c_zip, d_year@12 as syear, count(*)@15 as cnt, sum(store_sales.ss_wholesale_cost)@16 as s1, sum(store_sales.ss_list_price)@17 as s2, sum(store_sales.ss_coupon_amt)@18 as s3] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name, i_item_sk@1 as i_item_sk, s_store_name@2 as s_store_name, s_zip@3 as s_zip, ca_street_number@4 as ca_street_number, ca_street_name@5 as ca_street_name, ca_city@6 as ca_city, ca_zip@7 as ca_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, d_year@12 as d_year, d_year@13 as d_year, d_year@14 as d_year], aggr=[count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_product_name@0, i_item_sk@1, s_store_name@2, s_zip@3, ca_street_number@4, ca_street_name@5, ca_city@6, ca_zip@7, ca_street_number@8, ca_street_name@9, ca_city@10, ca_zip@11, d_year@12, d_year@13, d_year@14], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_product_name@17 as i_product_name, i_item_sk@16 as i_item_sk, s_store_name@6 as s_store_name, s_zip@7 as s_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, ca_street_number@12 as ca_street_number, ca_street_name@13 as ca_street_name, ca_city@14 as ca_city, ca_zip@15 as ca_zip, d_year@3 as d_year, d_year@4 as d_year, d_year@5 as d_year], aggr=[count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)] | +| | ProjectionExec: expr=[ss_wholesale_cost@0 as ss_wholesale_cost, ss_list_price@1 as ss_list_price, ss_coupon_amt@2 as ss_coupon_amt, d_year@3 as d_year, d_year@6 as d_year, d_year@7 as d_year, s_store_name@4 as s_store_name, s_zip@5 as s_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, ca_street_number@12 as ca_street_number, ca_street_name@13 as ca_street_name, ca_city@14 as ca_city, ca_zip@15 as ca_zip, i_item_sk@16 as i_item_sk, i_product_name@17 as i_product_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@7, d_year@8, ca_street_number@9, ca_street_name@10, ca_city@11, ca_zip@12, ca_street_number@13, ca_street_name@14, ca_city@15, ca_zip@16, i_item_sk@17, i_product_name@18] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(hd_income_band_sk@9, ib_income_band_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@7, d_year@8, ca_street_number@10, ca_street_name@11, ca_city@12, ca_zip@13, ca_street_number@14, ca_street_name@15, ca_city@16, ca_zip@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_income_band_sk@9], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(hd_income_band_sk@9, ib_income_band_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@7, d_year@8, hd_income_band_sk@10, ca_street_number@11, ca_street_name@12, ca_city@13, ca_zip@14, ca_street_number@15, ca_street_name@16, ca_city@17, ca_zip@18] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_income_band_sk@9], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@7, ca_address_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@8, d_year@9, hd_income_band_sk@10, hd_income_band_sk@11, ca_street_number@12, ca_street_name@13, ca_city@14, ca_zip@15, ca_street_number@17, ca_street_name@18, ca_city@19, ca_zip@20] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, c_current_addr_sk@8, d_year@9, d_year@10, hd_income_band_sk@11, hd_income_band_sk@12, ca_street_number@14, ca_street_name@15, ca_city@16, ca_zip@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_hdemo_sk@8, hd_demo_sk@0)], projection=[ss_item_sk@0, ss_addr_sk@1, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, c_current_addr_sk@9, d_year@10, d_year@11, hd_income_band_sk@12, hd_income_band_sk@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_hdemo_sk@8], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_item_sk@0, ss_addr_sk@2, ss_wholesale_cost@3, ss_list_price@4, ss_coupon_amt@5, d_year@6, s_store_name@7, s_zip@8, c_current_hdemo_sk@9, c_current_addr_sk@10, d_year@11, d_year@12, hd_income_band_sk@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_promo_sk@3, p_promo_sk@0)], projection=[ss_item_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_hdemo_sk@10, c_current_addr_sk@11, d_year@12, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_promo_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@10, cd_demo_sk@0)], filter=cd_marital_status@1 != cd_marital_status@0, projection=[ss_item_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_promo_sk@3, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@10], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_cdemo_sk@1, cd_demo_sk@0)], projection=[ss_item_sk@0, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@14, d_year@15, cd_marital_status@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_first_shipto_date_sk@14, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@15, d_year@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_first_shipto_date_sk@14], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_first_sales_date_sk@15, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, c_first_shipto_date_sk@14, d_year@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_first_sales_date_sk@15], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_promo_sk@5, ss_wholesale_cost@6, ss_list_price@7, ss_coupon_amt@8, d_year@9, s_store_name@10, s_zip@11, c_current_cdemo_sk@13, c_current_hdemo_sk@14, c_current_addr_sk@15, c_first_shipto_date_sk@16, c_first_sales_date_sk@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@5, s_store_sk@0)], projection=[ss_item_sk@0, ss_customer_sk@1, ss_cdemo_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_promo_sk@6, ss_wholesale_cost@7, ss_list_price@8, ss_coupon_amt@9, d_year@10, s_store_name@12, s_zip@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@5], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_customer_sk@2, ss_cdemo_sk@3, ss_hdemo_sk@4, ss_addr_sk@5, ss_store_sk@6, ss_promo_sk@7, ss_wholesale_cost@8, ss_list_price@9, ss_coupon_amt@10, d_year@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, cs_item_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_cdemo_sk@3, ss_hdemo_sk@4, ss_addr_sk@5, ss_store_sk@6, ss_promo_sk@7, ss_wholesale_cost@8, ss_list_price@9, ss_coupon_amt@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, sr_item_sk@0), (ss_ticket_number@8, sr_ticket_number@1)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_cdemo_sk@3, ss_hdemo_sk@4, ss_addr_sk@5, ss_store_sk@6, ss_promo_sk@7, ss_wholesale_cost@9, ss_list_price@10, ss_coupon_amt@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1, ss_ticket_number@8], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_item_sk@0, sr_ticket_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_ticket_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CAST(sum(catalog_sales.cs_ext_list_price)@1 AS Decimal128(38, 2)) > Some(2),20,0 * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)@2, projection=[cs_item_sk@0] | +| | AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, cr_item_sk@0), (cs_order_number@1, cr_order_number@1)], projection=[cs_item_sk@0, cs_ext_list_price@2, cr_refunded_cash@5, cr_reversed_charge@6, cr_store_credit@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0, cs_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_item_sk, cs_order_number, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_item_sk@0, cr_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk, hd_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk, hd_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ib_income_band_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/income_band/income_band.parquet]]}, projection=[ib_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ib_income_band_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/income_band/income_band.parquet]]}, projection=[ib_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_product_name], predicate=Use i_color@17 IN (SET) ([Literal { value: LargeUtf8("light") }, Literal { value: LargeUtf8("cyan") }, Literal { value: LargeUtf8("burnished") }, Literal { value: LargeUtf8("green") }, Literal { value: LargeUtf8("almond") }, Literal { value: LargeUtf8("smoke") }]) AND i_current_price@5 >= Some(2200),7,2 AND i_current_price@5 <= Some(3200),7,2 AND i_current_price@5 >= Some(2300),7,2 AND i_current_price@5 <= Some(3700),7,2, pruning_predicate=(i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= light AND light <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= cyan AND cyan <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= burnished AND burnished <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= green AND green <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= almond AND almond <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= smoke AND smoke <= i_color_max@1) AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_max@4 >= Some(2200),7,2 AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_min@7 <= Some(3200),7,2 AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_max@4 >= Some(2300),7,2 AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_min@7 <= Some(3700),7,2, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([item_sk@0, store_name@1, store_zip@2], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_item_sk@1 as item_sk, s_store_name@2 as store_name, s_zip@3 as store_zip, d_year@12 as syear, count(*)@15 as cnt, sum(store_sales.ss_wholesale_cost)@16 as s1, sum(store_sales.ss_list_price)@17 as s2, sum(store_sales.ss_coupon_amt)@18 as s3] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_product_name@0 as i_product_name, i_item_sk@1 as i_item_sk, s_store_name@2 as s_store_name, s_zip@3 as s_zip, ca_street_number@4 as ca_street_number, ca_street_name@5 as ca_street_name, ca_city@6 as ca_city, ca_zip@7 as ca_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, d_year@12 as d_year, d_year@13 as d_year, d_year@14 as d_year], aggr=[count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_product_name@0, i_item_sk@1, s_store_name@2, s_zip@3, ca_street_number@4, ca_street_name@5, ca_city@6, ca_zip@7, ca_street_number@8, ca_street_name@9, ca_city@10, ca_zip@11, d_year@12, d_year@13, d_year@14], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_product_name@17 as i_product_name, i_item_sk@16 as i_item_sk, s_store_name@6 as s_store_name, s_zip@7 as s_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, ca_street_number@12 as ca_street_number, ca_street_name@13 as ca_street_name, ca_city@14 as ca_city, ca_zip@15 as ca_zip, d_year@3 as d_year, d_year@4 as d_year, d_year@5 as d_year], aggr=[count(*), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_list_price), sum(store_sales.ss_coupon_amt)] | +| | ProjectionExec: expr=[ss_wholesale_cost@0 as ss_wholesale_cost, ss_list_price@1 as ss_list_price, ss_coupon_amt@2 as ss_coupon_amt, d_year@3 as d_year, d_year@6 as d_year, d_year@7 as d_year, s_store_name@4 as s_store_name, s_zip@5 as s_zip, ca_street_number@8 as ca_street_number, ca_street_name@9 as ca_street_name, ca_city@10 as ca_city, ca_zip@11 as ca_zip, ca_street_number@12 as ca_street_number, ca_street_name@13 as ca_street_name, ca_city@14 as ca_city, ca_zip@15 as ca_zip, i_item_sk@16 as i_item_sk, i_product_name@17 as i_product_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@7, d_year@8, ca_street_number@9, ca_street_name@10, ca_city@11, ca_zip@12, ca_street_number@13, ca_street_name@14, ca_city@15, ca_zip@16, i_item_sk@17, i_product_name@18] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(hd_income_band_sk@9, ib_income_band_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@7, d_year@8, ca_street_number@10, ca_street_name@11, ca_city@12, ca_zip@13, ca_street_number@14, ca_street_name@15, ca_city@16, ca_zip@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_income_band_sk@9], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(hd_income_band_sk@9, ib_income_band_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@7, d_year@8, hd_income_band_sk@10, ca_street_number@11, ca_street_name@12, ca_city@13, ca_zip@14, ca_street_number@15, ca_street_name@16, ca_city@17, ca_zip@18] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_income_band_sk@9], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@7, ca_address_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@1, ss_list_price@2, ss_coupon_amt@3, d_year@4, s_store_name@5, s_zip@6, d_year@8, d_year@9, hd_income_band_sk@10, hd_income_band_sk@11, ca_street_number@12, ca_street_name@13, ca_city@14, ca_zip@15, ca_street_number@17, ca_street_name@18, ca_city@19, ca_zip@20] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@7], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], projection=[ss_item_sk@0, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, c_current_addr_sk@8, d_year@9, d_year@10, hd_income_band_sk@11, hd_income_band_sk@12, ca_street_number@14, ca_street_name@15, ca_city@16, ca_zip@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_hdemo_sk@8, hd_demo_sk@0)], projection=[ss_item_sk@0, ss_addr_sk@1, ss_wholesale_cost@2, ss_list_price@3, ss_coupon_amt@4, d_year@5, s_store_name@6, s_zip@7, c_current_addr_sk@9, d_year@10, d_year@11, hd_income_band_sk@12, hd_income_band_sk@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_hdemo_sk@8], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_item_sk@0, ss_addr_sk@2, ss_wholesale_cost@3, ss_list_price@4, ss_coupon_amt@5, d_year@6, s_store_name@7, s_zip@8, c_current_hdemo_sk@9, c_current_addr_sk@10, d_year@11, d_year@12, hd_income_band_sk@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_promo_sk@3, p_promo_sk@0)], projection=[ss_item_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_hdemo_sk@10, c_current_addr_sk@11, d_year@12, d_year@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_promo_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@10, cd_demo_sk@0)], filter=cd_marital_status@1 != cd_marital_status@0, projection=[ss_item_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_promo_sk@3, ss_wholesale_cost@4, ss_list_price@5, ss_coupon_amt@6, d_year@7, s_store_name@8, s_zip@9, c_current_hdemo_sk@11, c_current_addr_sk@12, d_year@13, d_year@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@10], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_cdemo_sk@1, cd_demo_sk@0)], projection=[ss_item_sk@0, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@14, d_year@15, cd_marital_status@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_first_shipto_date_sk@14, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, d_year@15, d_year@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_first_shipto_date_sk@14], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_first_sales_date_sk@15, d_date_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_promo_sk@4, ss_wholesale_cost@5, ss_list_price@6, ss_coupon_amt@7, d_year@8, s_store_name@9, s_zip@10, c_current_cdemo_sk@11, c_current_hdemo_sk@12, c_current_addr_sk@13, c_first_shipto_date_sk@14, d_year@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_first_sales_date_sk@15], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_item_sk@0, ss_cdemo_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_promo_sk@5, ss_wholesale_cost@6, ss_list_price@7, ss_coupon_amt@8, d_year@9, s_store_name@10, s_zip@11, c_current_cdemo_sk@13, c_current_hdemo_sk@14, c_current_addr_sk@15, c_first_shipto_date_sk@16, c_first_sales_date_sk@17] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@5, s_store_sk@0)], projection=[ss_item_sk@0, ss_customer_sk@1, ss_cdemo_sk@2, ss_hdemo_sk@3, ss_addr_sk@4, ss_promo_sk@6, ss_wholesale_cost@7, ss_list_price@8, ss_coupon_amt@9, d_year@10, s_store_name@12, s_zip@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@5], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_customer_sk@2, ss_cdemo_sk@3, ss_hdemo_sk@4, ss_addr_sk@5, ss_store_sk@6, ss_promo_sk@7, ss_wholesale_cost@8, ss_list_price@9, ss_coupon_amt@10, d_year@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, cs_item_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_cdemo_sk@3, ss_hdemo_sk@4, ss_addr_sk@5, ss_store_sk@6, ss_promo_sk@7, ss_wholesale_cost@8, ss_list_price@9, ss_coupon_amt@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, sr_item_sk@0), (ss_ticket_number@8, sr_ticket_number@1)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_cdemo_sk@3, ss_hdemo_sk@4, ss_addr_sk@5, ss_store_sk@6, ss_promo_sk@7, ss_wholesale_cost@9, ss_list_price@10, ss_coupon_amt@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1, ss_ticket_number@8], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_wholesale_cost, ss_list_price, ss_coupon_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_item_sk@0, sr_ticket_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_ticket_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CAST(sum(catalog_sales.cs_ext_list_price)@1 AS Decimal128(38, 2)) > Some(2),20,0 * sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)@2, projection=[cs_item_sk@0] | +| | AggregateExec: mode=FinalPartitioned, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cs_item_sk@0 as cs_item_sk], aggr=[sum(catalog_sales.cs_ext_list_price), sum(catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge + catalog_returns.cr_store_credit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, cr_item_sk@0), (cs_order_number@1, cr_order_number@1)], projection=[cs_item_sk@0, cs_ext_list_price@2, cr_refunded_cash@5, cr_reversed_charge@6, cr_store_credit@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0, cs_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_item_sk, cs_order_number, cs_ext_list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_item_sk@0, cr_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number, cr_refunded_cash, cr_reversed_charge, cr_store_credit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_shipto_date_sk, c_first_sales_date_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk, hd_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk, hd_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_city, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ib_income_band_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/income_band/income_band.parquet]]}, projection=[ib_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ib_income_band_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/income_band/income_band.parquet]]}, projection=[ib_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_product_name], predicate=Use i_color@17 IN (SET) ([Literal { value: LargeUtf8("light") }, Literal { value: LargeUtf8("cyan") }, Literal { value: LargeUtf8("burnished") }, Literal { value: LargeUtf8("green") }, Literal { value: LargeUtf8("almond") }, Literal { value: LargeUtf8("smoke") }]) AND i_current_price@5 >= Some(2200),7,2 AND i_current_price@5 <= Some(3200),7,2 AND i_current_price@5 >= Some(2300),7,2 AND i_current_price@5 <= Some(3700),7,2, pruning_predicate=(i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= light AND light <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= cyan AND cyan <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= burnished AND burnished <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= green AND green <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= almond AND almond <= i_color_max@1 OR i_color_null_count@2 != i_color_row_count@3 AND i_color_min@0 <= smoke AND smoke <= i_color_max@1) AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_max@4 >= Some(2200),7,2 AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_min@7 <= Some(3200),7,2 AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_max@4 >= Some(2300),7,2 AND i_current_price_null_count@5 != i_current_price_row_count@6 AND i_current_price_min@7 <= Some(3700),7,2, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q65_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q65_explain.snap new file mode 100644 index 0000000000..b50cb2f90b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q65_explain.snap @@ -0,0 +1,103 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q65" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: store.s_store_name ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, fetch=100 | +| | Projection: store.s_store_name, item.i_item_desc, sc.revenue, item.i_current_price, item.i_wholesale_cost, item.i_brand | +| | Inner Join: sc.ss_store_sk = sb.ss_store_sk Filter: CAST(sc.revenue AS Decimal128(30, 15)) <= CAST(Float64(0.1) * CAST(sb.ave AS Float64) AS Decimal128(30, 15)) | +| | Projection: store.s_store_name, sc.ss_store_sk, sc.revenue, item.i_item_desc, item.i_current_price, item.i_wholesale_cost, item.i_brand | +| | Inner Join: sc.ss_item_sk = item.i_item_sk | +| | Projection: store.s_store_name, sc.ss_store_sk, sc.ss_item_sk, sc.revenue | +| | Inner Join: store.s_store_sk = sc.ss_store_sk | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name] | +| | SubqueryAlias: sc | +| | Projection: store_sales.ss_store_sk, store_sales.ss_item_sk, sum(store_sales.ss_sales_price) AS revenue | +| | Aggregate: groupBy=[[store_sales.ss_store_sk, store_sales.ss_item_sk]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1186), date_dim.d_month_seq <= Int32(1197)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_desc, i_current_price, i_wholesale_cost, i_brand] | +| | SubqueryAlias: sb | +| | Projection: sa.ss_store_sk, avg(sa.revenue) AS ave | +| | Aggregate: groupBy=[[sa.ss_store_sk]], aggr=[[avg(sa.revenue)]] | +| | SubqueryAlias: sa | +| | Projection: store_sales.ss_store_sk, sum(store_sales.ss_sales_price) AS revenue | +| | Aggregate: groupBy=[[store_sales.ss_store_sk, store_sales.ss_item_sk]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1186), date_dim.d_month_seq <= Int32(1197)] | +| physical_plan | SortPreservingMergeExec: [s_store_name@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[s_store_name@0 as s_store_name, i_item_desc@2 as i_item_desc, revenue@1 as revenue, i_current_price@3 as i_current_price, i_wholesale_cost@4 as i_wholesale_cost, i_brand@5 as i_brand] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, ss_store_sk@0)], filter=CAST(revenue@0 AS Decimal128(30, 15)) <= CAST(0.1 * CAST(ave@1 AS Float64) AS Decimal128(30, 15)), projection=[s_store_name@0, revenue@2, i_item_desc@3, i_current_price@4, i_wholesale_cost@5, i_brand@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@2, i_item_sk@0)], projection=[s_store_name@0, ss_store_sk@1, revenue@3, i_item_desc@5, i_current_price@6, i_wholesale_cost@7, i_brand@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(s_store_sk@0, ss_store_sk@0)], projection=[s_store_name@1, ss_store_sk@2, ss_item_sk@3, revenue@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_store_sk@0 as ss_store_sk, ss_item_sk@1 as ss_item_sk, sum(store_sales.ss_sales_price)@2 as revenue] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk, ss_item_sk@1 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0, ss_item_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_store_sk@1 as ss_store_sk, ss_item_sk@0 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1186 AND d_month_seq@3 <= 1197, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1186 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1197, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_desc, i_current_price, i_wholesale_cost, i_brand] | +| | ProjectionExec: expr=[ss_store_sk@0 as ss_store_sk, avg(sa.revenue)@1 as ave] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(sa.revenue)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_store_sk@0 as ss_store_sk], aggr=[avg(sa.revenue)] | +| | ProjectionExec: expr=[ss_store_sk@0 as ss_store_sk, sum(store_sales.ss_sales_price)@2 as revenue] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_store_sk@0 as ss_store_sk, ss_item_sk@1 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0, ss_item_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_store_sk@1 as ss_store_sk, ss_item_sk@0 as ss_item_sk], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1186 AND d_month_seq@3 <= 1197, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1186 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1197, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q66_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q66_explain.snap new file mode 100644 index 0000000000..1aaee6fe8f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q66_explain.snap @@ -0,0 +1,152 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q66" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: x.w_warehouse_name ASC NULLS LAST, fetch=100 | +| | Projection: x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year, sum(x.jan_sales) AS jan_sales, sum(x.feb_sales) AS feb_sales, sum(x.mar_sales) AS mar_sales, sum(x.apr_sales) AS apr_sales, sum(x.may_sales) AS may_sales, sum(x.jun_sales) AS jun_sales, sum(x.jul_sales) AS jul_sales, sum(x.aug_sales) AS aug_sales, sum(x.sep_sales) AS sep_sales, sum(x.oct_sales) AS oct_sales, sum(x.nov_sales) AS nov_sales, sum(x.dec_sales) AS dec_sales, sum(x.jan_sales / x.w_warehouse_sq_ft) AS jan_sales_per_sq_foot, sum(x.feb_sales / x.w_warehouse_sq_ft) AS feb_sales_per_sq_foot, sum(x.mar_sales / x.w_warehouse_sq_ft) AS mar_sales_per_sq_foot, sum(x.apr_sales / x.w_warehouse_sq_ft) AS apr_sales_per_sq_foot, sum(x.may_sales / x.w_warehouse_sq_ft) AS may_sales_per_sq_foot, sum(x.jun_sales / x.w_warehouse_sq_ft) AS jun_sales_per_sq_foot, sum(x.jul_sales / x.w_warehouse_sq_ft) AS jul_sales_per_sq_foot, sum(x.aug_sales / x.w_warehouse_sq_ft) AS aug_sales_per_sq_foot, sum(x.sep_sales / x.w_warehouse_sq_ft) AS sep_sales_per_sq_foot, sum(x.oct_sales / x.w_warehouse_sq_ft) AS oct_sales_per_sq_foot, sum(x.nov_sales / x.w_warehouse_sq_ft) AS nov_sales_per_sq_foot, sum(x.dec_sales / x.w_warehouse_sq_ft) AS dec_sales_per_sq_foot, sum(x.jan_net) AS jan_net, sum(x.feb_net) AS feb_net, sum(x.mar_net) AS mar_net, sum(x.apr_net) AS apr_net, sum(x.may_net) AS may_net, sum(x.jun_net) AS jun_net, sum(x.jul_net) AS jul_net, sum(x.aug_net) AS aug_net, sum(x.sep_net) AS sep_net, sum(x.oct_net) AS oct_net, sum(x.nov_net) AS nov_net, sum(x.dec_net) AS dec_net | +| | Aggregate: groupBy=[[x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year]], aggr=[[sum(x.jan_sales), sum(x.feb_sales), sum(x.mar_sales), sum(x.apr_sales), sum(x.may_sales), sum(x.jun_sales), sum(x.jul_sales), sum(x.aug_sales), sum(x.sep_sales), sum(x.oct_sales), sum(x.nov_sales), sum(x.dec_sales), sum(x.jan_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.feb_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.mar_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.apr_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.may_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.jun_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.jul_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.aug_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.sep_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.oct_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.nov_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.dec_sales / __common_expr_1 AS x.w_warehouse_sq_ft), sum(x.jan_net), sum(x.feb_net), sum(x.mar_net), sum(x.apr_net), sum(x.may_net), sum(x.jun_net), sum(x.jul_net), sum(x.aug_net), sum(x.sep_net), sum(x.oct_net), sum(x.nov_net), sum(x.dec_net)]] | +| | Projection: CAST(x.w_warehouse_sq_ft AS Decimal128(10, 0)) AS __common_expr_1, x.w_warehouse_name, x.w_warehouse_sq_ft, x.w_city, x.w_county, x.w_state, x.w_country, x.ship_carriers, x.year, x.jan_sales, x.feb_sales, x.mar_sales, x.apr_sales, x.may_sales, x.jun_sales, x.jul_sales, x.aug_sales, x.sep_sales, x.oct_sales, x.nov_sales, x.dec_sales, x.jan_net, x.feb_net, x.mar_net, x.apr_net, x.may_net, x.jun_net, x.jul_net, x.aug_net, x.sep_net, x.oct_net, x.nov_net, x.dec_net | +| | SubqueryAlias: x | +| | Union | +| | Projection: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, Utf8("FEDEX,GERMA") AS ship_carriers, date_dim.d_year AS year, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END) AS dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END) AS dec_net | +| | Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year]], aggr=[[sum(CASE WHEN __common_expr_2 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN CAST(web_sales.ws_ext_list_price * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_2 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_3 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_4 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_5 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_6 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_7 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_8 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_9 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_10 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_11 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_12 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_13 THEN CAST(web_sales.ws_net_profit * CAST(web_sales.ws_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)]] | +| | Projection: date_dim.d_moy = Int32(1) AS __common_expr_2, date_dim.d_moy = Int32(2) AS __common_expr_3, date_dim.d_moy = Int32(3) AS __common_expr_4, date_dim.d_moy = Int32(4) AS __common_expr_5, date_dim.d_moy = Int32(5) AS __common_expr_6, date_dim.d_moy = Int32(6) AS __common_expr_7, date_dim.d_moy = Int32(7) AS __common_expr_8, date_dim.d_moy = Int32(8) AS __common_expr_9, date_dim.d_moy = Int32(9) AS __common_expr_10, date_dim.d_moy = Int32(10) AS __common_expr_11, date_dim.d_moy = Int32(11) AS __common_expr_12, date_dim.d_moy = Int32(12) AS __common_expr_13, web_sales.ws_quantity, web_sales.ws_ext_list_price, web_sales.ws_net_profit, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year | +| | Inner Join: web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Projection: web_sales.ws_ship_mode_sk, web_sales.ws_quantity, web_sales.ws_ext_list_price, web_sales.ws_net_profit, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy | +| | Inner Join: web_sales.ws_sold_time_sk = time_dim.t_time_sk | +| | Projection: web_sales.ws_sold_time_sk, web_sales.ws_ship_mode_sk, web_sales.ws_quantity, web_sales.ws_ext_list_price, web_sales.ws_net_profit, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_sold_time_sk, web_sales.ws_ship_mode_sk, web_sales.ws_quantity, web_sales.ws_ext_list_price, web_sales.ws_net_profit, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country | +| | Inner Join: web_sales.ws_warehouse_sk = warehouse.w_warehouse_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_sold_time_sk, ws_ship_mode_sk, ws_warehouse_sk, ws_quantity, ws_ext_list_price, ws_net_profit] | +| | BytesProcessedNode | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_time >= Int32(19072), time_dim.t_time <= Int32(47872)] | +| | BytesProcessedNode | +| | TableScan: ship_mode projection=[sm_ship_mode_sk], full_filters=[ship_mode.sm_carrier = LargeUtf8("FEDEX") OR ship_mode.sm_carrier = LargeUtf8("GERMA")] | +| | Projection: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, Utf8("FEDEX,GERMA") AS ship_carriers, date_dim.d_year AS year, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END) AS dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END) AS dec_net | +| | Aggregate: groupBy=[[warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year]], aggr=[[sum(CASE WHEN __common_expr_14 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN CAST(catalog_sales.cs_sales_price * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_14 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_15 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_16 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_17 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_18 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_19 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_20 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_21 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_22 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_23 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_24 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN __common_expr_25 THEN CAST(catalog_sales.cs_net_paid * CAST(catalog_sales.cs_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)) ELSE Decimal128(Some(0),22,2) END) AS sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)]] | +| | Projection: date_dim.d_moy = Int32(1) AS __common_expr_14, date_dim.d_moy = Int32(2) AS __common_expr_15, date_dim.d_moy = Int32(3) AS __common_expr_16, date_dim.d_moy = Int32(4) AS __common_expr_17, date_dim.d_moy = Int32(5) AS __common_expr_18, date_dim.d_moy = Int32(6) AS __common_expr_19, date_dim.d_moy = Int32(7) AS __common_expr_20, date_dim.d_moy = Int32(8) AS __common_expr_21, date_dim.d_moy = Int32(9) AS __common_expr_22, date_dim.d_moy = Int32(10) AS __common_expr_23, date_dim.d_moy = Int32(11) AS __common_expr_24, date_dim.d_moy = Int32(12) AS __common_expr_25, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year | +| | Inner Join: catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Projection: catalog_sales.cs_ship_mode_sk, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy | +| | Inner Join: catalog_sales.cs_sold_time_sk = time_dim.t_time_sk | +| | Projection: catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year, date_dim.d_moy | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_sold_time_sk, catalog_sales.cs_ship_mode_sk, catalog_sales.cs_quantity, catalog_sales.cs_sales_price, catalog_sales.cs_net_paid, warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country | +| | Inner Join: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_sold_time_sk, cs_ship_mode_sk, cs_warehouse_sk, cs_quantity, cs_sales_price, cs_net_paid] | +| | BytesProcessedNode | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy], full_filters=[date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_time >= Int32(19072), time_dim.t_time <= Int32(47872)] | +| | BytesProcessedNode | +| | TableScan: ship_mode projection=[sm_ship_mode_sk], full_filters=[ship_mode.sm_carrier = LargeUtf8("FEDEX") OR ship_mode.sm_carrier = LargeUtf8("GERMA")] | +| physical_plan | SortPreservingMergeExec: [w_warehouse_name@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[w_warehouse_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, ship_carriers@6 as ship_carriers, year@7 as year, sum(x.jan_sales)@8 as jan_sales, sum(x.feb_sales)@9 as feb_sales, sum(x.mar_sales)@10 as mar_sales, sum(x.apr_sales)@11 as apr_sales, sum(x.may_sales)@12 as may_sales, sum(x.jun_sales)@13 as jun_sales, sum(x.jul_sales)@14 as jul_sales, sum(x.aug_sales)@15 as aug_sales, sum(x.sep_sales)@16 as sep_sales, sum(x.oct_sales)@17 as oct_sales, sum(x.nov_sales)@18 as nov_sales, sum(x.dec_sales)@19 as dec_sales, sum(x.jan_sales / x.w_warehouse_sq_ft)@20 as jan_sales_per_sq_foot, sum(x.feb_sales / x.w_warehouse_sq_ft)@21 as feb_sales_per_sq_foot, sum(x.mar_sales / x.w_warehouse_sq_ft)@22 as mar_sales_per_sq_foot, sum(x.apr_sales / x.w_warehouse_sq_ft)@23 as apr_sales_per_sq_foot, sum(x.may_sales / x.w_warehouse_sq_ft)@24 as may_sales_per_sq_foot, sum(x.jun_sales / x.w_warehouse_sq_ft)@25 as jun_sales_per_sq_foot, sum(x.jul_sales / x.w_warehouse_sq_ft)@26 as jul_sales_per_sq_foot, sum(x.aug_sales / x.w_warehouse_sq_ft)@27 as aug_sales_per_sq_foot, sum(x.sep_sales / x.w_warehouse_sq_ft)@28 as sep_sales_per_sq_foot, sum(x.oct_sales / x.w_warehouse_sq_ft)@29 as oct_sales_per_sq_foot, sum(x.nov_sales / x.w_warehouse_sq_ft)@30 as nov_sales_per_sq_foot, sum(x.dec_sales / x.w_warehouse_sq_ft)@31 as dec_sales_per_sq_foot, sum(x.jan_net)@32 as jan_net, sum(x.feb_net)@33 as feb_net, sum(x.mar_net)@34 as mar_net, sum(x.apr_net)@35 as apr_net, sum(x.may_net)@36 as may_net, sum(x.jun_net)@37 as jun_net, sum(x.jul_net)@38 as jul_net, sum(x.aug_net)@39 as aug_net, sum(x.sep_net)@40 as sep_net, sum(x.oct_net)@41 as oct_net, sum(x.nov_net)@42 as nov_net, sum(x.dec_net)@43 as dec_net] | +| | AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, ship_carriers@6 as ship_carriers, year@7 as year], aggr=[sum(x.jan_sales), sum(x.feb_sales), sum(x.mar_sales), sum(x.apr_sales), sum(x.may_sales), sum(x.jun_sales), sum(x.jul_sales), sum(x.aug_sales), sum(x.sep_sales), sum(x.oct_sales), sum(x.nov_sales), sum(x.dec_sales), sum(x.jan_sales / x.w_warehouse_sq_ft), sum(x.feb_sales / x.w_warehouse_sq_ft), sum(x.mar_sales / x.w_warehouse_sq_ft), sum(x.apr_sales / x.w_warehouse_sq_ft), sum(x.may_sales / x.w_warehouse_sq_ft), sum(x.jun_sales / x.w_warehouse_sq_ft), sum(x.jul_sales / x.w_warehouse_sq_ft), sum(x.aug_sales / x.w_warehouse_sq_ft), sum(x.sep_sales / x.w_warehouse_sq_ft), sum(x.oct_sales / x.w_warehouse_sq_ft), sum(x.nov_sales / x.w_warehouse_sq_ft), sum(x.dec_sales / x.w_warehouse_sq_ft), sum(x.jan_net), sum(x.feb_net), sum(x.mar_net), sum(x.apr_net), sum(x.may_net), sum(x.jun_net), sum(x.jul_net), sum(x.aug_net), sum(x.sep_net), sum(x.oct_net), sum(x.nov_net), sum(x.dec_net)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_name@0, w_warehouse_sq_ft@1, w_city@2, w_county@3, w_state@4, w_country@5, ship_carriers@6, year@7], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[w_warehouse_name@1 as w_warehouse_name, w_warehouse_sq_ft@2 as w_warehouse_sq_ft, w_city@3 as w_city, w_county@4 as w_county, w_state@5 as w_state, w_country@6 as w_country, ship_carriers@7 as ship_carriers, year@8 as year], aggr=[sum(x.jan_sales), sum(x.feb_sales), sum(x.mar_sales), sum(x.apr_sales), sum(x.may_sales), sum(x.jun_sales), sum(x.jul_sales), sum(x.aug_sales), sum(x.sep_sales), sum(x.oct_sales), sum(x.nov_sales), sum(x.dec_sales), sum(x.jan_sales / x.w_warehouse_sq_ft), sum(x.feb_sales / x.w_warehouse_sq_ft), sum(x.mar_sales / x.w_warehouse_sq_ft), sum(x.apr_sales / x.w_warehouse_sq_ft), sum(x.may_sales / x.w_warehouse_sq_ft), sum(x.jun_sales / x.w_warehouse_sq_ft), sum(x.jul_sales / x.w_warehouse_sq_ft), sum(x.aug_sales / x.w_warehouse_sq_ft), sum(x.sep_sales / x.w_warehouse_sq_ft), sum(x.oct_sales / x.w_warehouse_sq_ft), sum(x.nov_sales / x.w_warehouse_sq_ft), sum(x.dec_sales / x.w_warehouse_sq_ft), sum(x.jan_net), sum(x.feb_net), sum(x.mar_net), sum(x.apr_net), sum(x.may_net), sum(x.jun_net), sum(x.jul_net), sum(x.aug_net), sum(x.sep_net), sum(x.oct_net), sum(x.nov_net), sum(x.dec_net)] | +| | ProjectionExec: expr=[CAST(w_warehouse_sq_ft@1 AS Decimal128(10, 0)) as __common_expr_1, w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, ship_carriers@6 as ship_carriers, year@7 as year, jan_sales@8 as jan_sales, feb_sales@9 as feb_sales, mar_sales@10 as mar_sales, apr_sales@11 as apr_sales, may_sales@12 as may_sales, jun_sales@13 as jun_sales, jul_sales@14 as jul_sales, aug_sales@15 as aug_sales, sep_sales@16 as sep_sales, oct_sales@17 as oct_sales, nov_sales@18 as nov_sales, dec_sales@19 as dec_sales, jan_net@20 as jan_net, feb_net@21 as feb_net, mar_net@22 as mar_net, apr_net@23 as apr_net, may_net@24 as may_net, jun_net@25 as jun_net, jul_net@26 as jul_net, aug_net@27 as aug_net, sep_net@28 as sep_net, oct_net@29 as oct_net, nov_net@30 as nov_net, dec_net@31 as dec_net] | +| | InterleaveExec | +| | ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, FEDEX,GERMA as ship_carriers, d_year@6 as year, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@7 as jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@8 as feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@9 as mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@10 as apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@11 as may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@12 as jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@13 as jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@14 as aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@15 as sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@16 as oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@17 as nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END)@18 as dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@19 as jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@20 as feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@21 as mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@22 as apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@23 as may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@24 as jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@25 as jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@26 as aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@27 as sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@28 as oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@29 as nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)@30 as dec_net] | +| | AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, d_year@6 as d_year], aggr=[sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_name@0, w_warehouse_sq_ft@1, w_city@2, w_county@3, w_state@4, w_country@5, d_year@6], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[w_warehouse_name@15 as w_warehouse_name, w_warehouse_sq_ft@16 as w_warehouse_sq_ft, w_city@17 as w_city, w_county@18 as w_county, w_state@19 as w_state, w_country@20 as w_country, d_year@21 as d_year], aggr=[sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_ext_list_price * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(1) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN web_sales.ws_net_profit * web_sales.ws_quantity ELSE Int64(0) END)] | +| | ProjectionExec: expr=[d_moy@10 = 1 as __common_expr_2, d_moy@10 = 2 as __common_expr_3, d_moy@10 = 3 as __common_expr_4, d_moy@10 = 4 as __common_expr_5, d_moy@10 = 5 as __common_expr_6, d_moy@10 = 6 as __common_expr_7, d_moy@10 = 7 as __common_expr_8, d_moy@10 = 8 as __common_expr_9, d_moy@10 = 9 as __common_expr_10, d_moy@10 = 10 as __common_expr_11, d_moy@10 = 11 as __common_expr_12, d_moy@10 = 12 as __common_expr_13, ws_quantity@0 as ws_quantity, ws_ext_list_price@1 as ws_ext_list_price, ws_net_profit@2 as ws_net_profit, w_warehouse_name@3 as w_warehouse_name, w_warehouse_sq_ft@4 as w_warehouse_sq_ft, w_city@5 as w_city, w_county@6 as w_county, w_state@7 as w_state, w_country@8 as w_country, d_year@9 as d_year] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_mode_sk@0, sm_ship_mode_sk@0)], projection=[ws_quantity@1, ws_ext_list_price@2, ws_net_profit@3, w_warehouse_name@4, w_warehouse_sq_ft@5, w_city@6, w_county@7, w_state@8, w_country@9, d_year@10, d_moy@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_mode_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_time_sk@0, t_time_sk@0)], projection=[ws_ship_mode_sk@1, ws_quantity@2, ws_ext_list_price@3, ws_net_profit@4, w_warehouse_name@5, w_warehouse_sq_ft@6, w_city@7, w_county@8, w_state@9, w_country@10, d_year@11, d_moy@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_sold_time_sk@1, ws_ship_mode_sk@2, ws_quantity@3, ws_ext_list_price@4, ws_net_profit@5, w_warehouse_name@6, w_warehouse_sq_ft@7, w_city@8, w_county@9, w_state@10, w_country@11, d_year@13, d_moy@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_warehouse_sk@3, w_warehouse_sk@0)], projection=[ws_sold_date_sk@0, ws_sold_time_sk@1, ws_ship_mode_sk@2, ws_quantity@4, ws_ext_list_price@5, ws_net_profit@6, w_warehouse_name@8, w_warehouse_sq_ft@9, w_city@10, w_county@11, w_state@12, w_country@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_warehouse_sk@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_sold_time_sk, ws_ship_mode_sk, ws_warehouse_sk, ws_quantity, ws_ext_list_price, ws_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/warehouse/warehouse.parquet]]}, projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_time@2 >= 19072 AND t_time@2 <= 47872, pruning_predicate=t_time_null_count@1 != t_time_row_count@2 AND t_time_max@0 >= 19072 AND t_time_null_count@1 != t_time_row_count@2 AND t_time_min@3 <= 47872, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sm_ship_mode_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/ship_mode/ship_mode.parquet]]}, projection=[sm_ship_mode_sk], predicate=sm_carrier@4 = FEDEX OR sm_carrier@4 = GERMA, pruning_predicate=sm_carrier_null_count@2 != sm_carrier_row_count@3 AND sm_carrier_min@0 <= FEDEX AND FEDEX <= sm_carrier_max@1 OR sm_carrier_null_count@2 != sm_carrier_row_count@3 AND sm_carrier_min@0 <= GERMA AND GERMA <= sm_carrier_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, FEDEX,GERMA as ship_carriers, d_year@6 as year, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@7 as jan_sales, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@8 as feb_sales, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@9 as mar_sales, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@10 as apr_sales, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@11 as may_sales, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@12 as jun_sales, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@13 as jul_sales, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@14 as aug_sales, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@15 as sep_sales, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@16 as oct_sales, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@17 as nov_sales, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END)@18 as dec_sales, sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@19 as jan_net, sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@20 as feb_net, sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@21 as mar_net, sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@22 as apr_net, sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@23 as may_net, sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@24 as jun_net, sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@25 as jul_net, sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@26 as aug_net, sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@27 as sep_net, sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@28 as oct_net, sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@29 as nov_net, sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)@30 as dec_net] | +| | AggregateExec: mode=FinalPartitioned, gby=[w_warehouse_name@0 as w_warehouse_name, w_warehouse_sq_ft@1 as w_warehouse_sq_ft, w_city@2 as w_city, w_county@3 as w_county, w_state@4 as w_state, w_country@5 as w_country, d_year@6 as d_year], aggr=[sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_name@0, w_warehouse_sq_ft@1, w_city@2, w_county@3, w_state@4, w_country@5, d_year@6], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[w_warehouse_name@15 as w_warehouse_name, w_warehouse_sq_ft@16 as w_warehouse_sq_ft, w_city@17 as w_city, w_county@18 as w_county, w_state@19 as w_state, w_country@20 as w_country, d_year@21 as d_year], aggr=[sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_sales_price * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(1) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(2) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(3) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(4) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(5) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(6) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(7) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(8) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(9) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(10) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(11) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END), sum(CASE WHEN date_dim.d_moy = Int64(12) THEN catalog_sales.cs_net_paid * catalog_sales.cs_quantity ELSE Int64(0) END)] | +| | ProjectionExec: expr=[d_moy@10 = 1 as __common_expr_14, d_moy@10 = 2 as __common_expr_15, d_moy@10 = 3 as __common_expr_16, d_moy@10 = 4 as __common_expr_17, d_moy@10 = 5 as __common_expr_18, d_moy@10 = 6 as __common_expr_19, d_moy@10 = 7 as __common_expr_20, d_moy@10 = 8 as __common_expr_21, d_moy@10 = 9 as __common_expr_22, d_moy@10 = 10 as __common_expr_23, d_moy@10 = 11 as __common_expr_24, d_moy@10 = 12 as __common_expr_25, cs_quantity@0 as cs_quantity, cs_sales_price@1 as cs_sales_price, cs_net_paid@2 as cs_net_paid, w_warehouse_name@3 as w_warehouse_name, w_warehouse_sq_ft@4 as w_warehouse_sq_ft, w_city@5 as w_city, w_county@6 as w_county, w_state@7 as w_state, w_country@8 as w_country, d_year@9 as d_year] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_ship_mode_sk@0, sm_ship_mode_sk@0)], projection=[cs_quantity@1, cs_sales_price@2, cs_net_paid@3, w_warehouse_name@4, w_warehouse_sq_ft@5, w_city@6, w_county@7, w_state@8, w_country@9, d_year@10, d_moy@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_mode_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_time_sk@0, t_time_sk@0)], projection=[cs_ship_mode_sk@1, cs_quantity@2, cs_sales_price@3, cs_net_paid@4, w_warehouse_name@5, w_warehouse_sq_ft@6, w_city@7, w_county@8, w_state@9, w_country@10, d_year@11, d_moy@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_sold_time_sk@1, cs_ship_mode_sk@2, cs_quantity@3, cs_sales_price@4, cs_net_paid@5, w_warehouse_name@6, w_warehouse_sq_ft@7, w_city@8, w_county@9, w_state@10, w_country@11, d_year@13, d_moy@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_warehouse_sk@3, w_warehouse_sk@0)], projection=[cs_sold_date_sk@0, cs_sold_time_sk@1, cs_ship_mode_sk@2, cs_quantity@4, cs_sales_price@5, cs_net_paid@6, w_warehouse_name@8, w_warehouse_sq_ft@9, w_city@10, w_county@11, w_state@12, w_country@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_warehouse_sk@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_sold_time_sk, cs_ship_mode_sk, cs_warehouse_sk, cs_quantity, cs_sales_price, cs_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/warehouse/warehouse.parquet]]}, projection=[w_warehouse_sk, w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_time@2 >= 19072 AND t_time@2 <= 47872, pruning_predicate=t_time_null_count@1 != t_time_row_count@2 AND t_time_max@0 >= 19072 AND t_time_null_count@1 != t_time_row_count@2 AND t_time_min@3 <= 47872, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sm_ship_mode_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/ship_mode/ship_mode.parquet]]}, projection=[sm_ship_mode_sk], predicate=sm_carrier@4 = FEDEX OR sm_carrier@4 = GERMA, pruning_predicate=sm_carrier_null_count@2 != sm_carrier_row_count@3 AND sm_carrier_min@0 <= FEDEX AND FEDEX <= sm_carrier_max@1 OR sm_carrier_null_count@2 != sm_carrier_row_count@3 AND sm_carrier_min@0 <= GERMA AND GERMA <= sm_carrier_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q67_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q67_explain.snap new file mode 100644 index 0000000000..71105c43e6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q67_explain.snap @@ -0,0 +1,74 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q67" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: dw2.i_category ASC NULLS LAST, dw2.i_class ASC NULLS LAST, dw2.i_brand ASC NULLS LAST, dw2.i_product_name ASC NULLS LAST, dw2.d_year ASC NULLS LAST, dw2.d_qoy ASC NULLS LAST, dw2.d_moy ASC NULLS LAST, dw2.s_store_id ASC NULLS LAST, dw2.sumsales ASC NULLS LAST, dw2.rk ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: dw2 | +| | Projection: dw1.i_category, dw1.i_class, dw1.i_brand, dw1.i_product_name, dw1.d_year, dw1.d_qoy, dw1.d_moy, dw1.s_store_id, dw1.sumsales, rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rk | +| | Filter: rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(100) | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | SubqueryAlias: dw1 | +| | Projection: item.i_category, item.i_class, item.i_brand, item.i_product_name, date_dim.d_year, date_dim.d_qoy, date_dim.d_moy, store.s_store_id, sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0))) AS sumsales | +| | Aggregate: groupBy=[[ROLLUP (item.i_category, item.i_class, item.i_brand, item.i_product_name, date_dim.d_year, date_dim.d_qoy, date_dim.d_moy, store.s_store_id)]], aggr=[[sum(coalesce(CAST(store_sales.ss_sales_price * CAST(store_sales.ss_quantity AS Decimal128(10, 0)) AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))]] | +| | Projection: store_sales.ss_quantity, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, date_dim.d_qoy, store.s_store_id, item.i_brand, item.i_class, item.i_category, item.i_product_name | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_quantity, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, date_dim.d_qoy, store.s_store_id | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_quantity, store_sales.ss_sales_price, date_dim.d_year, date_dim.d_moy, date_dim.d_qoy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_quantity, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_moy, d_qoy], full_filters=[date_dim.d_month_seq >= Int32(1194), date_dim.d_month_seq <= Int32(1205)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_class, i_category, i_product_name] | +| physical_plan | SortPreservingMergeExec: [i_category@0 ASC NULLS LAST, i_class@1 ASC NULLS LAST, i_brand@2 ASC NULLS LAST, i_product_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_qoy@5 ASC NULLS LAST, d_moy@6 ASC NULLS LAST, s_store_id@7 ASC NULLS LAST, sumsales@8 ASC NULLS LAST, rk@9 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_category@0 ASC NULLS LAST, i_class@1 ASC NULLS LAST, i_brand@2 ASC NULLS LAST, i_product_name@3 ASC NULLS LAST, d_year@4 ASC NULLS LAST, d_qoy@5 ASC NULLS LAST, d_moy@6 ASC NULLS LAST, s_store_id@7 ASC NULLS LAST, sumsales@8 ASC NULLS LAST, rk@9 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, i_product_name@3 as i_product_name, d_year@4 as d_year, d_qoy@5 as d_qoy, d_moy@6 as d_moy, s_store_id@7 as s_store_id, sumsales@8 as sumsales, rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@9 as rk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@9 <= 100 | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [dw1.i_category] ORDER BY [dw1.sumsales DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,32,2)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, sumsales@8 DESC], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, i_product_name@3 as i_product_name, d_year@4 as d_year, d_qoy@5 as d_qoy, d_moy@6 as d_moy, s_store_id@7 as s_store_id, sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))@9 as sumsales] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, i_product_name@3 as i_product_name, d_year@4 as d_year, d_qoy@5 as d_qoy, d_moy@6 as d_moy, s_store_id@7 as s_store_id, __grouping_id@8 as __grouping_id], aggr=[sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_class@1, i_brand@2, i_product_name@3, d_year@4, d_qoy@5, d_moy@6, s_store_id@7, __grouping_id@8], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[(NULL as i_category, NULL as i_class, NULL as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@8 as i_category, NULL as i_class, NULL as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@8 as i_category, i_class@7 as i_class, NULL as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@8 as i_category, i_class@7 as i_class, i_brand@6 as i_brand, NULL as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@8 as i_category, i_class@7 as i_class, i_brand@6 as i_brand, i_product_name@9 as i_product_name, NULL as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@8 as i_category, i_class@7 as i_class, i_brand@6 as i_brand, i_product_name@9 as i_product_name, d_year@2 as d_year, NULL as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@8 as i_category, i_class@7 as i_class, i_brand@6 as i_brand, i_product_name@9 as i_product_name, d_year@2 as d_year, d_qoy@4 as d_qoy, NULL as d_moy, NULL as s_store_id), (i_category@8 as i_category, i_class@7 as i_class, i_brand@6 as i_brand, i_product_name@9 as i_product_name, d_year@2 as d_year, d_qoy@4 as d_qoy, d_moy@3 as d_moy, NULL as s_store_id), (i_category@8 as i_category, i_class@7 as i_class, i_brand@6 as i_brand, i_product_name@9 as i_product_name, d_year@2 as d_year, d_qoy@4 as d_qoy, d_moy@3 as d_moy, s_store_id@5 as s_store_id)], aggr=[sum(coalesce(store_sales.ss_sales_price * store_sales.ss_quantity,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_quantity@1, ss_sales_price@2, d_year@3, d_moy@4, d_qoy@5, s_store_id@6, i_brand@8, i_class@9, i_category@10, i_product_name@11] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_item_sk@0, ss_quantity@2, ss_sales_price@3, d_year@4, d_moy@5, d_qoy@6, s_store_id@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_quantity@3, ss_sales_price@4, d_year@6, d_moy@7, d_qoy@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_quantity, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_moy, d_qoy], predicate=d_month_seq@3 >= 1194 AND d_month_seq@3 <= 1205, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1194 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1205, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_class, i_category, i_product_name] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q68_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q68_explain.snap new file mode 100644 index 0000000000..c1296b1b2c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q68_explain.snap @@ -0,0 +1,104 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q68" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer.c_last_name ASC NULLS LAST, dn.ss_ticket_number ASC NULLS LAST, fetch=100 | +| | Projection: customer.c_last_name, customer.c_first_name, current_addr.ca_city, dn.bought_city, dn.ss_ticket_number, dn.extended_price, dn.extended_tax, dn.list_price | +| | Inner Join: customer.c_current_addr_sk = current_addr.ca_address_sk Filter: dn.bought_city != current_addr.ca_city | +| | Projection: dn.ss_ticket_number, dn.bought_city, dn.extended_price, dn.list_price, dn.extended_tax, customer.c_current_addr_sk, customer.c_first_name, customer.c_last_name | +| | Inner Join: dn.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: dn | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, customer_address.ca_city AS bought_city, sum(store_sales.ss_ext_sales_price) AS extended_price, sum(store_sales.ss_ext_list_price) AS list_price, sum(store_sales.ss_ext_tax) AS extended_tax | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, customer_address.ca_city]], aggr=[[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_ext_list_price), sum(store_sales.ss_ext_tax)]] | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax, customer_address.ca_city | +| | Inner Join: store_sales.ss_addr_sk = customer_address.ca_address_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number, store_sales.ss_ext_sales_price, store_sales.ss_ext_list_price, store_sales.ss_ext_tax | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_ext_sales_price, ss_ext_list_price, ss_ext_tax] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_dom >= Int32(1), date_dim.d_dom <= Int32(2), date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_city = LargeUtf8("Midway") OR store.s_city = LargeUtf8("Fairview")] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(8) OR household_demographics.hd_vehicle_count = Int32(3)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | SubqueryAlias: current_addr | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_city] | +| physical_plan | SortPreservingMergeExec: [c_last_name@0 ASC NULLS LAST, ss_ticket_number@4 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[c_last_name@0 ASC NULLS LAST, ss_ticket_number@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_last_name@6 as c_last_name, c_first_name@5 as c_first_name, ca_city@7 as ca_city, bought_city@1 as bought_city, ss_ticket_number@0 as ss_ticket_number, extended_price@2 as extended_price, extended_tax@4 as extended_tax, list_price@3 as list_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@5, ca_address_sk@0)], filter=bought_city@0 != ca_city@1, projection=[ss_ticket_number@0, bought_city@1, extended_price@2, list_price@3, extended_tax@4, c_first_name@6, c_last_name@7, ca_city@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@5], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_ticket_number@0, bought_city@2, extended_price@3, list_price@4, extended_tax@5, c_current_addr_sk@7, c_first_name@8, c_last_name@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ca_city@3 as bought_city, sum(store_sales.ss_ext_sales_price)@4 as extended_price, sum(store_sales.ss_ext_list_price)@5 as list_price, sum(store_sales.ss_ext_tax)@6 as extended_tax] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ss_addr_sk@2 as ss_addr_sk, ca_city@3 as ca_city], aggr=[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_ext_list_price), sum(store_sales.ss_ext_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1, ss_addr_sk@2, ca_city@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_ticket_number@2 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk, ss_addr_sk@1 as ss_addr_sk, ca_city@6 as ca_city], aggr=[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_ext_list_price), sum(store_sales.ss_ext_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_addr_sk@1, ca_address_sk@0)], projection=[ss_customer_sk@0, ss_addr_sk@1, ss_ticket_number@2, ss_ext_sales_price@3, ss_ext_list_price@4, ss_ext_tax@5, ca_city@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_customer_sk@0, ss_addr_sk@2, ss_ticket_number@3, ss_ext_sales_price@4, ss_ext_list_price@5, ss_ext_tax@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@3, s_store_sk@0)], projection=[ss_customer_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_ticket_number@4, ss_ext_sales_price@5, ss_ext_list_price@6, ss_ext_tax@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_store_sk@4, ss_ticket_number@5, ss_ext_sales_price@6, ss_ext_list_price@7, ss_ext_tax@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_ext_sales_price, ss_ext_list_price, ss_ext_tax] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_dom@9 >= 1 AND d_dom@9 <= 2 AND (d_year@6 = 2000 OR d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_max@0 >= 1 AND d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_min@3 <= 2 AND (d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2002 AND 2002 <= d_year_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_city@22 = Midway OR s_city@22 = Fairview, pruning_predicate=s_city_null_count@2 != s_city_row_count@3 AND s_city_min@0 <= Midway AND Midway <= s_city_max@1 OR s_city_null_count@2 != s_city_row_count@3 AND s_city_min@0 <= Fairview AND Fairview <= s_city_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 8 OR hd_vehicle_count@4 = 3, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 8 AND 8 <= hd_dep_count_max@1 OR hd_vehicle_count_null_count@6 != hd_vehicle_count_row_count@7 AND hd_vehicle_count_min@4 <= 3 AND 3 <= hd_vehicle_count_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_city] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_city] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q69_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q69_explain.snap new file mode 100644 index 0000000000..200f360081 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q69_explain.snap @@ -0,0 +1,124 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q69" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer_demographics.cd_gender ASC NULLS LAST, customer_demographics.cd_marital_status ASC NULLS LAST, customer_demographics.cd_education_status ASC NULLS LAST, customer_demographics.cd_purchase_estimate ASC NULLS LAST, customer_demographics.cd_credit_rating ASC NULLS LAST, fetch=100 | +| | Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, count(*) AS cnt1, customer_demographics.cd_purchase_estimate, count(*) AS cnt2, customer_demographics.cd_credit_rating, count(*) AS cnt3 | +| | Aggregate: groupBy=[[customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating | +| | LeftAnti Join: c.c_customer_sk = __correlated_sq_3.cs_ship_customer_sk | +| | LeftAnti Join: c.c_customer_sk = __correlated_sq_2.ws_bill_customer_sk | +| | LeftSemi Join: c.c_customer_sk = __correlated_sq_1.ss_customer_sk | +| | Projection: c.c_customer_sk, customer_demographics.cd_gender, customer_demographics.cd_marital_status, customer_demographics.cd_education_status, customer_demographics.cd_purchase_estimate, customer_demographics.cd_credit_rating | +| | Inner Join: c.c_current_cdemo_sk = customer_demographics.cd_demo_sk | +| | Projection: c.c_customer_sk, c.c_current_cdemo_sk | +| | Inner Join: c.c_current_addr_sk = ca.ca_address_sk | +| | SubqueryAlias: c | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | SubqueryAlias: ca | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = LargeUtf8("IN") OR customer_address.ca_state = LargeUtf8("VA") OR customer_address.ca_state = LargeUtf8("MS")] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating] | +| | SubqueryAlias: __correlated_sq_1 | +| | Projection: store_sales.ss_customer_sk | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy >= Int32(2), date_dim.d_moy <= Int32(4)] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: web_sales.ws_bill_customer_sk | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy >= Int32(2), date_dim.d_moy <= Int32(4)] | +| | SubqueryAlias: __correlated_sq_3 | +| | Projection: catalog_sales.cs_ship_customer_sk | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy >= Int32(2), date_dim.d_moy <= Int32(4)] | +| physical_plan | SortPreservingMergeExec: [cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@4 ASC NULLS LAST, cd_credit_rating@6 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[cd_gender@0 ASC NULLS LAST, cd_marital_status@1 ASC NULLS LAST, cd_education_status@2 ASC NULLS LAST, cd_purchase_estimate@4 ASC NULLS LAST, cd_credit_rating@6 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, count(*)@5 as cnt1, cd_purchase_estimate@3 as cd_purchase_estimate, count(*)@5 as cnt2, cd_credit_rating@4 as cd_credit_rating, count(*)@5 as cnt3] | +| | AggregateExec: mode=FinalPartitioned, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_gender@0, cd_marital_status@1, cd_education_status@2, cd_purchase_estimate@3, cd_credit_rating@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cd_gender@0 as cd_gender, cd_marital_status@1 as cd_marital_status, cd_education_status@2 as cd_education_status, cd_purchase_estimate@3 as cd_purchase_estimate, cd_credit_rating@4 as cd_credit_rating], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(c_customer_sk@0, cs_ship_customer_sk@0)], projection=[cd_gender@1, cd_marital_status@2, cd_education_status@3, cd_purchase_estimate@4, cd_credit_rating@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(c_customer_sk@0, ws_bill_customer_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(c_customer_sk@0, ss_customer_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_sk@0, cd_gender@3, cd_marital_status@4, cd_education_status@5, cd_purchase_estimate@6, cd_credit_rating@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@2, ca_address_sk@0)], projection=[c_customer_sk@0, c_current_cdemo_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@2], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_state@8 = IN OR ca_state@8 = VA OR ca_state@8 = MS, pruning_predicate=ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= IN AND IN <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= VA AND VA <= ca_state_max@1 OR ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= MS AND MS <= ca_state_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_gender, cd_marital_status, cd_education_status, cd_purchase_estimate, cd_credit_rating] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 >= 2 AND d_moy@8 <= 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_max@4 >= 2 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_min@7 <= 4, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_bill_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 >= 2 AND d_moy@8 <= 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_max@4 >= 2 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_min@7 <= 4, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_ship_customer_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_ship_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 >= 2 AND d_moy@8 <= 4, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_max@4 >= 2 AND d_moy_null_count@5 != d_moy_row_count@6 AND d_moy_min@7 <= 4, required_guarantees=[N] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q6_explain.snap new file mode 100644 index 0000000000..9c17ccd69c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q6_explain.snap @@ -0,0 +1,126 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q6" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: state, cnt | +| | Sort: cnt ASC NULLS LAST, a.ca_state ASC NULLS LAST, fetch=100 | +| | Projection: a.ca_state AS state, count(*) AS cnt, a.ca_state | +| | Filter: count(*) >= Int64(10) | +| | Aggregate: groupBy=[[a.ca_state]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: a.ca_state | +| | Filter: CAST(i.i_current_price AS Decimal128(30, 15)) > CAST(Float64(1.2) * __scalar_sq_2.avg(j.i_current_price) AS Decimal128(30, 15)) | +| | Projection: a.ca_state, i.i_current_price, __scalar_sq_2.avg(j.i_current_price) | +| | Left Join: i.i_category = __scalar_sq_2.i_category | +| | Projection: a.ca_state, i.i_current_price, i.i_category | +| | Inner Join: d.d_month_seq = __scalar_sq_1.d_month_seq | +| | Projection: a.ca_state, d.d_month_seq, i.i_current_price, i.i_category | +| | Inner Join: s.ss_item_sk = i.i_item_sk | +| | Projection: a.ca_state, s.ss_item_sk, d.d_month_seq | +| | Inner Join: s.ss_sold_date_sk = d.d_date_sk | +| | Projection: a.ca_state, s.ss_sold_date_sk, s.ss_item_sk | +| | Inner Join: c.c_customer_sk = s.ss_customer_sk | +| | Projection: a.ca_state, c.c_customer_sk | +| | Inner Join: a.ca_address_sk = c.c_current_addr_sk | +| | SubqueryAlias: a | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | SubqueryAlias: c | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_addr_sk] | +| | SubqueryAlias: s | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] | +| | SubqueryAlias: d | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_month_seq] | +| | SubqueryAlias: i | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_current_price, i_category] | +| | SubqueryAlias: __scalar_sq_1 | +| | Aggregate: groupBy=[[date_dim.d_month_seq]], aggr=[[]] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_month_seq], full_filters=[date_dim.d_year = Int32(1998), date_dim.d_moy = Int32(3)] | +| | SubqueryAlias: __scalar_sq_2 | +| | Projection: CAST(avg(j.i_current_price) AS Float64), j.i_category | +| | Aggregate: groupBy=[[j.i_category]], aggr=[[avg(j.i_current_price)]] | +| | SubqueryAlias: j | +| | BytesProcessedNode | +| | TableScan: item projection=[i_current_price, i_category] | +| physical_plan | ProjectionExec: expr=[state@0 as state, cnt@1 as cnt] | +| | SortPreservingMergeExec: [cnt@1 ASC NULLS LAST, ca_state@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[cnt@1 ASC NULLS LAST, ca_state@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ca_state@0 as state, count(*)@1 as cnt, ca_state@0 as ca_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: count(*)@1 >= 10 | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_state@0 as ca_state], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_state@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_state@0 as ca_state], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CAST(i_current_price@1 AS Decimal128(30, 15)) > CAST(1.2 * avg(j.i_current_price)@2 AS Decimal128(30, 15)), projection=[ca_state@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(i_category@2, i_category@1)], projection=[ca_state@0, i_current_price@1, avg(j.i_current_price)@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(d_month_seq@1, d_month_seq@0)], projection=[ca_state@0, i_current_price@2, i_category@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_month_seq@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[ca_state@0, d_month_seq@2, i_current_price@4, i_category@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@1, d_date_sk@0)], projection=[ca_state@0, ss_item_sk@2, d_month_seq@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@1, ss_customer_sk@2)], projection=[ca_state@0, ss_sold_date_sk@2, ss_item_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@1)], projection=[ca_state@1, c_customer_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_month_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_current_price, i_category] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_month_seq@0 as d_month_seq], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_month_seq@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_month_seq@0 as d_month_seq], aggr=[] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_month_seq], predicate=d_year@6 = 1998 AND d_moy@8 = 3, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 3 AND 3 <= d_moy_max@5, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(avg(j.i_current_price)@1 AS Float64) as avg(j.i_current_price), i_category@0 as i_category] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category], aggr=[avg(j.i_current_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@1 as i_category], aggr=[avg(j.i_current_price)] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_current_price, i_category] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q70_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q70_explain.snap new file mode 100644 index 0000000000..e061731750 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q70_explain.snap @@ -0,0 +1,108 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q70" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lochierarchy DESC NULLS FIRST, CASE WHEN lochierarchy = Int32(0) THEN store.s_state END AS CASE WHEN lochierarchy = Int64(0) THEN store.s_state END ASC NULLS LAST, rank_within_parent ASC NULLS LAST, fetch=100 | +| | Projection: sum(store_sales.ss_net_profit) AS total_sum, store.s_state, store.s_county, grouping(store.s_state) + grouping(store.s_county) AS lochierarchy, rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank_within_parent | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int32(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Projection: store.s_state, store.s_county, sum(store_sales.ss_net_profit), CAST(__grouping_id & UInt8(2) >> UInt8(1) AS Int32) AS grouping(store.s_state), CAST(__grouping_id & UInt8(1) AS Int32) AS grouping(store.s_county) | +| | Aggregate: groupBy=[[ROLLUP (store.s_state, store.s_county)]], aggr=[[sum(store_sales.ss_net_profit)]] | +| | LeftSemi Join: store.s_state = __correlated_sq_1.s_state | +| | Projection: store_sales.ss_net_profit, store.s_county, store.s_state | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_sold_date_sk = d1.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1180), date_dim.d_month_seq <= Int32(1191)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_county, s_state] | +| | SubqueryAlias: __correlated_sq_1 | +| | SubqueryAlias: tmp1 | +| | Projection: store.s_state | +| | Filter: rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <= UInt64(5) | +| | Projection: store.s_state, rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Aggregate: groupBy=[[store.s_state]], aggr=[[sum(store_sales.ss_net_profit)]] | +| | Projection: store_sales.ss_net_profit, store.s_state | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_net_profit, store.s_state | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_state] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1180), date_dim.d_month_seq <= Int32(1191)] | +| physical_plan | SortPreservingMergeExec: [lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN s_state@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN s_state@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[sum(store_sales.ss_net_profit)@2 as total_sum, s_state@0 as s_state, s_county@1 as s_county, grouping(store.s_state)@3 + grouping(store.s_county)@4 as lochierarchy, rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 as rank_within_parent] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [grouping(store.s_state) + grouping(store.s_county), CASE WHEN grouping(store.s_county) = Int64(0) THEN store.s_state END] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,17,2)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[grouping(store.s_state)@3 + grouping(store.s_county)@4 ASC NULLS LAST, CASE WHEN grouping(store.s_county)@4 = 0 THEN s_state@0 END ASC NULLS LAST, sum(store_sales.ss_net_profit)@2 DESC], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([grouping(store.s_state)@3 + grouping(store.s_county)@4, CASE WHEN grouping(store.s_county)@4 = 0 THEN s_state@0 END], 24), input_partitions=24 | +| | ProjectionExec: expr=[s_state@0 as s_state, s_county@1 as s_county, sum(store_sales.ss_net_profit)@3 as sum(store_sales.ss_net_profit), CAST(__grouping_id@2 & 2 >> 1 AS Int32) as grouping(store.s_state), CAST(__grouping_id@2 & 1 AS Int32) as grouping(store.s_county)] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_state@0 as s_state, s_county@1 as s_county, __grouping_id@2 as __grouping_id], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_state@0, s_county@1, __grouping_id@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[(NULL as s_state, NULL as s_county), (s_state@2 as s_state, NULL as s_county), (s_state@2 as s_state, s_county@1 as s_county)], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(s_state@2, s_state@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_state@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)], projection=[ss_net_profit@1, s_county@3, s_state@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_store_sk@1, ss_net_profit@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1180 AND d_month_seq@3 <= 1191, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1180 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1191, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_county, s_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@1 <= 5, projection=[s_state@0] | +| | ProjectionExec: expr=[s_state@0 as s_state, rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@2 as rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [store.s_state] ORDER BY [sum(store_sales.ss_net_profit) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,17,2)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[s_state@0 ASC NULLS LAST, sum(store_sales.ss_net_profit)@1 DESC], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_state@0 as s_state], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_state@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_state@1 as s_state], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_net_profit@1, s_state@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_sold_date_sk@0, ss_net_profit@2, s_state@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1180 AND d_month_seq@3 <= 1191, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1180 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1191, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q71_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q71_explain.snap new file mode 100644 index 0000000000..7cff533b35 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q71_explain.snap @@ -0,0 +1,104 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q71" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: brand_id, brand, time_dim.t_hour, time_dim.t_minute, ext_price | +| | Sort: ext_price DESC NULLS FIRST, item.i_brand_id ASC NULLS LAST | +| | Projection: item.i_brand_id AS brand_id, item.i_brand AS brand, time_dim.t_hour, time_dim.t_minute, sum(tmp.ext_price) AS ext_price, item.i_brand_id | +| | Aggregate: groupBy=[[item.i_brand, item.i_brand_id, time_dim.t_hour, time_dim.t_minute]], aggr=[[sum(tmp.ext_price)]] | +| | Projection: item.i_brand_id, item.i_brand, tmp.ext_price, time_dim.t_hour, time_dim.t_minute | +| | Inner Join: tmp.time_sk = time_dim.t_time_sk | +| | Projection: item.i_brand_id, item.i_brand, tmp.ext_price, tmp.time_sk | +| | Inner Join: item.i_item_sk = tmp.sold_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_brand], full_filters=[item.i_manager_id = Int32(1)] | +| | SubqueryAlias: tmp | +| | Union | +| | Projection: web_sales.ws_ext_sales_price AS ext_price, web_sales.ws_item_sk AS sold_item_sk, web_sales.ws_sold_time_sk AS time_sk | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_sold_time_sk, ws_item_sk, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(11), date_dim.d_year = Int32(2001)] | +| | Projection: catalog_sales.cs_ext_sales_price AS ext_price, catalog_sales.cs_item_sk AS sold_item_sk, catalog_sales.cs_sold_time_sk AS time_sk | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_sold_time_sk, cs_item_sk, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(11), date_dim.d_year = Int32(2001)] | +| | Projection: store_sales.ss_ext_sales_price AS ext_price, store_sales.ss_item_sk AS sold_item_sk, store_sales.ss_sold_time_sk AS time_sk | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_sold_time_sk, ss_item_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_moy = Int32(11), date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk, t_hour, t_minute], full_filters=[time_dim.t_meal_time = LargeUtf8("breakfast") OR time_dim.t_meal_time = LargeUtf8("dinner")] | +| physical_plan | ProjectionExec: expr=[brand_id@0 as brand_id, brand@1 as brand, t_hour@2 as t_hour, t_minute@3 as t_minute, ext_price@4 as ext_price] | +| | SortPreservingMergeExec: [ext_price@4 DESC, i_brand_id@5 ASC NULLS LAST] | +| | SortExec: expr=[ext_price@4 DESC, i_brand_id@5 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_brand_id@1 as brand_id, i_brand@0 as brand, t_hour@2 as t_hour, t_minute@3 as t_minute, sum(tmp.ext_price)@4 as ext_price, i_brand_id@1 as i_brand_id] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_brand@0 as i_brand, i_brand_id@1 as i_brand_id, t_hour@2 as t_hour, t_minute@3 as t_minute], aggr=[sum(tmp.ext_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_brand@0, i_brand_id@1, t_hour@2, t_minute@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_brand@1 as i_brand, i_brand_id@0 as i_brand_id, t_hour@3 as t_hour, t_minute@4 as t_minute], aggr=[sum(tmp.ext_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(time_sk@3, t_time_sk@0)], projection=[i_brand_id@0, i_brand@1, ext_price@2, t_hour@5, t_minute@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([time_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, sold_item_sk@1)], projection=[i_brand_id@1, i_brand@2, ext_price@3, time_sk@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_brand], predicate=i_manager_id@20 = 1, pruning_predicate=i_manager_id_null_count@2 != i_manager_id_row_count@3 AND i_manager_id_min@0 <= 1 AND 1 <= i_manager_id_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sold_item_sk@1], 24), input_partitions=72 | +| | UnionExec | +| | ProjectionExec: expr=[ws_ext_sales_price@2 as ext_price, ws_item_sk@1 as sold_item_sk, ws_sold_time_sk@0 as time_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_sold_time_sk@1, ws_item_sk@2, ws_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_sold_time_sk, ws_item_sk, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 11 AND d_year@6 = 2001, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 11 AND 11 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5, required_guarantees=[N] | +| | ProjectionExec: expr=[cs_ext_sales_price@2 as ext_price, cs_item_sk@1 as sold_item_sk, cs_sold_time_sk@0 as time_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_sold_time_sk@1, cs_item_sk@2, cs_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_sold_time_sk, cs_item_sk, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 11 AND d_year@6 = 2001, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 11 AND 11 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5, required_guarantees=[N] | +| | ProjectionExec: expr=[ss_ext_sales_price@2 as ext_price, ss_item_sk@1 as sold_item_sk, ss_sold_time_sk@0 as time_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_sold_time_sk@1, ss_item_sk@2, ss_ext_sales_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_sold_time_sk, ss_item_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_moy@8 = 11 AND d_year@6 = 2001, pruning_predicate=d_moy_null_count@2 != d_moy_row_count@3 AND d_moy_min@0 <= 11 AND 11 <= d_moy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk, t_hour, t_minute], predicate=t_meal_time@9 = breakfast OR t_meal_time@9 = dinner, pruning_predicate=t_meal_time_null_count@2 != t_meal_time_row_count@3 AND t_meal_time_min@0 <= breakfast AND breakfast <= t_meal_time_max@1 OR t_meal_time_null_count@2 != t_meal_time_row_count@3 AND t_meal_time_min@0 <= dinner AND dinner <= t_meal_time_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q72_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q72_explain.snap new file mode 100644 index 0000000000..5dcb0a7810 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q72_explain.snap @@ -0,0 +1,154 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q72" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: total_cnt DESC NULLS FIRST, item.i_item_desc ASC NULLS LAST, warehouse.w_warehouse_name ASC NULLS LAST, d1.d_week_seq ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_desc, warehouse.w_warehouse_name, d1.d_week_seq, sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END) AS no_promo, sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS promo, count(*) AS total_cnt | +| | Aggregate: groupBy=[[item.i_item_desc, warehouse.w_warehouse_name, d1.d_week_seq]], aggr=[[sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), count(Int64(1)) AS count(*)]] | +| | Projection: warehouse.w_warehouse_name, item.i_item_desc, d1.d_week_seq, promotion.p_promo_sk | +| | Left Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_order_number, warehouse.w_warehouse_name, item.i_item_desc, d1.d_week_seq, promotion.p_promo_sk | +| | Left Join: catalog_sales.cs_promo_sk = promotion.p_promo_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, warehouse.w_warehouse_name, item.i_item_desc, d1.d_week_seq | +| | Inner Join: catalog_sales.cs_ship_date_sk = d3.d_date_sk Filter: d3.d_date > d1.d_date + IntervalMonthDayNano("IntervalMonthDayNano { months: 0, days: 5, nanoseconds: 0 }") | +| | Projection: catalog_sales.cs_ship_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, warehouse.w_warehouse_name, item.i_item_desc, d1.d_date, d1.d_week_seq | +| | Inner Join: inventory.inv_date_sk = d2.d_date_sk, d1.d_week_seq = d2.d_week_seq | +| | Projection: catalog_sales.cs_ship_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc, d1.d_date, d1.d_week_seq | +| | Inner Join: catalog_sales.cs_sold_date_sk = d1.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc | +| | Inner Join: catalog_sales.cs_bill_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc | +| | Inner Join: catalog_sales.cs_bill_cdemo_sk = customer_demographics.cd_demo_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name, item.i_item_desc | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, warehouse.w_warehouse_name | +| | Inner Join: inventory.inv_warehouse_sk = warehouse.w_warehouse_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_bill_cdemo_sk, catalog_sales.cs_bill_hdemo_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_order_number, inventory.inv_date_sk, inventory.inv_warehouse_sk | +| | Inner Join: catalog_sales.cs_item_sk = inventory.inv_item_sk Filter: inventory.inv_quantity_on_hand < catalog_sales.cs_quantity | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_date_sk, cs_bill_cdemo_sk, cs_bill_hdemo_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_quantity] | +| | BytesProcessedNode | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] | +| | BytesProcessedNode | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_desc] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk], full_filters=[customer_demographics.cd_marital_status = LargeUtf8("S")] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_buy_potential = LargeUtf8("501-1000")] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date, d_week_seq], full_filters=[date_dim.d_year = Int32(1999)] | +| | SubqueryAlias: d2 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_week_seq] | +| | SubqueryAlias: d3 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number] | +| physical_plan | SortPreservingMergeExec: [total_cnt@5 DESC, i_item_desc@0 ASC NULLS LAST, w_warehouse_name@1 ASC NULLS LAST, d_week_seq@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[total_cnt@5 DESC, i_item_desc@0 ASC NULLS LAST, w_warehouse_name@1 ASC NULLS LAST, d_week_seq@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_desc@0 as i_item_desc, w_warehouse_name@1 as w_warehouse_name, d_week_seq@2 as d_week_seq, sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END)@3 as no_promo, sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)@4 as promo, count(*)@5 as total_cnt] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_desc@0 as i_item_desc, w_warehouse_name@1 as w_warehouse_name, d_week_seq@2 as d_week_seq], aggr=[sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_desc@0, w_warehouse_name@1, d_week_seq@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_desc@1 as i_item_desc, w_warehouse_name@0 as w_warehouse_name, d_week_seq@2 as d_week_seq], aggr=[sum(CASE WHEN promotion.p_promo_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN promotion.p_promo_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_item_sk@0, cr_item_sk@0), (cs_order_number@1, cr_order_number@1)], projection=[w_warehouse_name@2, i_item_desc@3, d_week_seq@4, p_promo_sk@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0, cs_order_number@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_promo_sk@1, p_promo_sk@0)], projection=[cs_item_sk@0, cs_order_number@2, w_warehouse_name@3, i_item_desc@4, d_week_seq@5, p_promo_sk@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_promo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_ship_date_sk@0, d_date_sk@0)], filter=d_date@1 > d_date@0 + IntervalMonthDayNano { months: 0, days: 5, nanoseconds: 0 }, projection=[cs_item_sk@1, cs_promo_sk@2, cs_order_number@3, w_warehouse_name@4, i_item_desc@5, d_week_seq@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_date_sk@4, d_date_sk@0), (d_week_seq@8, d_week_seq@1)], projection=[cs_ship_date_sk@0, cs_item_sk@1, cs_promo_sk@2, cs_order_number@3, w_warehouse_name@5, i_item_desc@6, d_date@7, d_week_seq@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_date_sk@4, d_week_seq@8], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_ship_date_sk@1, cs_item_sk@2, cs_promo_sk@3, cs_order_number@4, inv_date_sk@5, w_warehouse_name@6, i_item_desc@7, d_date@9, d_week_seq@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_hdemo_sk@2, hd_demo_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, cs_item_sk@3, cs_promo_sk@4, cs_order_number@5, inv_date_sk@6, w_warehouse_name@7, i_item_desc@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_hdemo_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_cdemo_sk@2, cd_demo_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, cs_bill_hdemo_sk@3, cs_item_sk@4, cs_promo_sk@5, cs_order_number@6, inv_date_sk@7, w_warehouse_name@8, i_item_desc@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_cdemo_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@4, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, cs_bill_cdemo_sk@2, cs_bill_hdemo_sk@3, cs_item_sk@4, cs_promo_sk@5, cs_order_number@6, inv_date_sk@7, w_warehouse_name@8, i_item_desc@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_warehouse_sk@8, w_warehouse_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, cs_bill_cdemo_sk@2, cs_bill_hdemo_sk@3, cs_item_sk@4, cs_promo_sk@5, cs_order_number@6, inv_date_sk@7, w_warehouse_name@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_warehouse_sk@8], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@4, inv_item_sk@1)], filter=inv_quantity_on_hand@1 < cs_quantity@0, projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, cs_bill_cdemo_sk@2, cs_bill_hdemo_sk@3, cs_item_sk@4, cs_promo_sk@5, cs_order_number@6, inv_date_sk@8, inv_warehouse_sk@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_ship_date_sk, cs_bill_cdemo_sk, cs_bill_hdemo_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/inventory/inventory.parquet:0..2678460], [tpcds_sf1/inventory/inventory.parquet:2678460..5356920], [tpcds_sf1/inventory/inventory.parquet:5356920..8035380], [tpcds_sf1/inventory/inventory.parquet:8035380..10713840], [tpcds_sf1/inventory/inventory.parquet:10713840..13392300], ...]}, projection=[inv_date_sk, inv_item_sk, inv_warehouse_sk, inv_quantity_on_hand] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/warehouse/warehouse.parquet]]}, projection=[w_warehouse_sk, w_warehouse_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_desc] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk], predicate=cd_marital_status@2 = S, pruning_predicate=cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= S AND S <= cd_marital_status_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_buy_potential@2 = 501-1000, pruning_predicate=hd_buy_potential_null_count@2 != hd_buy_potential_row_count@3 AND hd_buy_potential_min@0 <= 501-1000 AND 501-1000 <= hd_buy_potential_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date, d_week_seq], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0, d_week_seq@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_week_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_item_sk@0, cr_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q73_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q73_explain.snap new file mode 100644 index 0000000000..a30e463006 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q73_explain.snap @@ -0,0 +1,80 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q73" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: dj.cnt DESC NULLS FIRST, customer.c_last_name ASC NULLS LAST | +| | Projection: customer.c_last_name, customer.c_first_name, customer.c_salutation, customer.c_preferred_cust_flag, dj.ss_ticket_number, dj.cnt | +| | Inner Join: dj.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: dj | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, count(*) AS cnt | +| | Filter: count(*) >= Int64(1) AND count(*) <= Int64(5) | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_ticket_number | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_ticket_number | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_dom >= Int32(1), date_dim.d_dom <= Int32(2), date_dim.d_year = Int32(1999) OR date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_county IN ([LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County"), LargeUtf8("Williamson County")])] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_buy_potential = LargeUtf8("1001-5000") OR household_demographics.hd_buy_potential = LargeUtf8("5001-10000"), household_demographics.hd_vehicle_count > Int32(0), CASE WHEN household_demographics.hd_vehicle_count > Int32(0) THEN household_demographics.hd_dep_count / household_demographics.hd_vehicle_count ELSE Int32(NULL) END > Int32(1)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] | +| physical_plan | SortPreservingMergeExec: [cnt@5 DESC, c_last_name@0 ASC NULLS LAST] | +| | SortExec: expr=[cnt@5 DESC, c_last_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_last_name@4 as c_last_name, c_first_name@3 as c_first_name, c_salutation@2 as c_salutation, c_preferred_cust_flag@5 as c_preferred_cust_flag, ss_ticket_number@0 as ss_ticket_number, cnt@1 as cnt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_ticket_number@0, cnt@2, c_salutation@4, c_first_name@5, c_last_name@6, c_preferred_cust_flag@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, count(*)@2 as cnt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: count(*)@2 >= 1 AND count(*)@2 <= 5 | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_ticket_number@1 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_customer_sk@0, ss_ticket_number@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@2, s_store_sk@0)], projection=[ss_customer_sk@0, ss_hdemo_sk@1, ss_ticket_number@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_store_sk@3, ss_ticket_number@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_store_sk, ss_ticket_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_dom@9 >= 1 AND d_dom@9 <= 2 AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001), pruning_predicate=d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_max@0 >= 1 AND d_dom_null_count@1 != d_dom_row_count@2 AND d_dom_min@3 <= 2 AND (d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=Use s_county@23 IN (SET) ([Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }, Literal { value: LargeUtf8("Williamson County") }]), pruning_predicate=s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1 OR s_county_null_count@2 != s_county_row_count@3 AND s_county_min@0 <= Williamson County AND Williamson County <= s_county_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=(hd_buy_potential@2 = 1001-5000 OR hd_buy_potential@2 = 5001-10000) AND hd_vehicle_count@4 > 0 AND CASE WHEN hd_vehicle_count@4 > 0 THEN hd_dep_count@3 / hd_vehicle_count@4 END > 1, pruning_predicate=(hd_buy_potential_null_count@2 != hd_buy_potential_row_count@3 AND hd_buy_potential_min@0 <= 1001-5000 AND 1001-5000 <= hd_buy_potential_max@1 OR hd_buy_potential_null_count@2 != hd_buy_potential_row_count@3 AND hd_buy_potential_min@0 <= 5001-10000 AND 5001-10000 <= hd_buy_potential_max@1) AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_max@4 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_salutation, c_first_name, c_last_name, c_preferred_cust_flag] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q74_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q74_explain.snap new file mode 100644 index 0000000000..1ddf871734 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q74_explain.snap @@ -0,0 +1,363 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q74" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: t_s_secyear.customer_last_name ASC NULLS LAST, t_s_secyear.customer_first_name ASC NULLS LAST, t_s_secyear.customer_id ASC NULLS LAST, fetch=100 | +| | Projection: t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name | +| | Inner Join: t_s_firstyear.customer_id = t_w_secyear.customer_id Filter: CASE WHEN t_w_firstyear.year_total > Float64(0) THEN t_w_secyear.year_total / t_w_firstyear.year_total ELSE Float64(NULL) END > CASE WHEN t_s_firstyear.year_total > Float64(0) THEN t_s_secyear.year_total / t_s_firstyear.year_total ELSE Float64(NULL) END | +| | Projection: t_s_firstyear.customer_id, t_s_firstyear.year_total, t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name, t_s_secyear.year_total, t_w_firstyear.year_total | +| | Inner Join: t_s_firstyear.customer_id = t_w_firstyear.customer_id | +| | Inner Join: t_s_firstyear.customer_id = t_s_secyear.customer_id | +| | SubqueryAlias: t_s_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, stddev(store_sales.ss_net_paid) AS year_total | +| | Filter: stddev(store_sales.ss_net_paid) > Float64(0) | +| | Projection: customer.c_customer_id, stddev(store_sales.ss_net_paid) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(store_sales.ss_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_net_paid, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_sold_date_sk, store_sales.ss_net_paid | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, stddev(web_sales.ws_net_paid) AS year_total | +| | Filter: stddev(web_sales.ws_net_paid) > Float64(0) | +| | Projection: customer.c_customer_id, stddev(web_sales.ws_net_paid) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(web_sales.ws_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_net_paid, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_sold_date_sk, web_sales.ws_net_paid | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | SubqueryAlias: t_s_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, stddev(store_sales.ss_net_paid) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(store_sales.ss_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_net_paid, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_sold_date_sk, store_sales.ss_net_paid | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, customer.c_first_name AS customer_first_name, customer.c_last_name AS customer_last_name, stddev(web_sales.ws_net_paid) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(web_sales.ws_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_net_paid, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_sold_date_sk, web_sales.ws_net_paid | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | SubqueryAlias: t_w_firstyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, stddev(store_sales.ss_net_paid) AS year_total | +| | Filter: stddev(store_sales.ss_net_paid) > Float64(0) | +| | Projection: customer.c_customer_id, stddev(store_sales.ss_net_paid) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(store_sales.ss_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_net_paid, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_sold_date_sk, store_sales.ss_net_paid | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, stddev(web_sales.ws_net_paid) AS year_total | +| | Filter: stddev(web_sales.ws_net_paid) > Float64(0) | +| | Projection: customer.c_customer_id, stddev(web_sales.ws_net_paid) | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(web_sales.ws_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_net_paid, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_sold_date_sk, web_sales.ws_net_paid | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | SubqueryAlias: t_w_secyear | +| | SubqueryAlias: year_total | +| | Union | +| | Projection: customer.c_customer_id AS customer_id, stddev(store_sales.ss_net_paid) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(store_sales.ss_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_net_paid, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, store_sales.ss_sold_date_sk, store_sales.ss_net_paid | +| | Inner Join: customer.c_customer_sk = store_sales.ss_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(false)] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| | Projection: customer.c_customer_id AS customer_id, stddev(web_sales.ws_net_paid) AS year_total | +| | Aggregate: groupBy=[[customer.c_customer_id, customer.c_first_name, customer.c_last_name, date_dim.d_year]], aggr=[[stddev(web_sales.ws_net_paid)]] | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_net_paid, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, web_sales.ws_sold_date_sk, web_sales.ws_net_paid | +| | Inner Join: customer.c_customer_sk = web_sales.ws_bill_customer_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], full_filters=[Boolean(true)] | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_year = Int32(2001) OR date_dim.d_year = Int32(2002)] | +| physical_plan | SortPreservingMergeExec: [customer_last_name@2 ASC NULLS LAST, customer_first_name@1 ASC NULLS LAST, customer_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[customer_last_name@2 ASC NULLS LAST, customer_first_name@1 ASC NULLS LAST, customer_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], filter=CASE WHEN year_total@2 > 0 THEN year_total@3 / year_total@2 END > CASE WHEN year_total@0 > 0 THEN year_total@1 / year_total@0 END, projection=[customer_id@2, customer_first_name@3, customer_last_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)], projection=[customer_id@0, year_total@1, customer_id@2, customer_first_name@3, customer_last_name@4, year_total@5, year_total@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(customer_id@0, customer_id@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, stddev(store_sales.ss_net_paid)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: stddev(store_sales.ss_net_paid)@1 > 0 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, stddev(store_sales.ss_net_paid)@4 as stddev(store_sales.ss_net_paid)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ss_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ss_sold_date_sk@4, ss_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, stddev(web_sales.ws_net_paid)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: stddev(web_sales.ws_net_paid)@1 > 0 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, stddev(web_sales.ws_net_paid)@4 as stddev(web_sales.ws_net_paid)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ws_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ws_sold_date_sk@4, ws_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, stddev(store_sales.ss_net_paid)@4 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ss_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ss_sold_date_sk@4, ss_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, c_first_name@1 as customer_first_name, c_last_name@2 as customer_last_name, stddev(web_sales.ws_net_paid)@4 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ws_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ws_sold_date_sk@4, ws_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, stddev(store_sales.ss_net_paid)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: stddev(store_sales.ss_net_paid)@1 > 0 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, stddev(store_sales.ss_net_paid)@4 as stddev(store_sales.ss_net_paid)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ss_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ss_sold_date_sk@4, ss_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, stddev(web_sales.ws_net_paid)@1 as year_total] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: stddev(web_sales.ws_net_paid)@1 > 0 | +| | ProjectionExec: expr=[c_customer_id@0 as c_customer_id, stddev(web_sales.ws_net_paid)@4 as stddev(web_sales.ws_net_paid)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ws_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ws_sold_date_sk@4, ws_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([customer_id@0], 24), input_partitions=48 | +| | UnionExec | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, stddev(store_sales.ss_net_paid)@4 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(store_sales.ss_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ss_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ss_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ss_sold_date_sk@4, ss_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=false | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, stddev(web_sales.ws_net_paid)@4 as year_total] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@3 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_id@0, c_first_name@1, c_last_name@2, d_year@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_customer_id@0 as c_customer_id, c_first_name@1 as c_first_name, c_last_name@2 as c_last_name, d_year@4 as d_year], aggr=[stddev(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@3, d_date_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, ws_net_paid@4, d_year@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_customer_sk@0, ws_bill_customer_sk@1)], projection=[c_customer_id@1, c_first_name@2, c_last_name@3, ws_sold_date_sk@4, ws_net_paid@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_first_name, c_last_name], predicate=true | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk, ws_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2002 AND (d_year@6 = 2001 OR d_year@6 = 2002), pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND (d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1 OR d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1), required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q75_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q75_explain.snap new file mode 100644 index 0000000000..88fd519127 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q75_explain.snap @@ -0,0 +1,315 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q75" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: sales_cnt_diff ASC NULLS LAST, sales_amt_diff ASC NULLS LAST, fetch=100 | +| | Projection: prev_yr.d_year AS prev_year, curr_yr.d_year AS year, curr_yr.i_brand_id, curr_yr.i_class_id, curr_yr.i_category_id, curr_yr.i_manufact_id, prev_yr.sales_cnt AS prev_yr_cnt, curr_yr.sales_cnt AS curr_yr_cnt, curr_yr.sales_cnt - prev_yr.sales_cnt AS sales_cnt_diff, curr_yr.sales_amt - prev_yr.sales_amt AS sales_amt_diff | +| | Inner Join: curr_yr.i_brand_id = prev_yr.i_brand_id, curr_yr.i_class_id = prev_yr.i_class_id, curr_yr.i_category_id = prev_yr.i_category_id, curr_yr.i_manufact_id = prev_yr.i_manufact_id Filter: CAST(curr_yr.sales_cnt AS Decimal128(17, 2)) / CAST(prev_yr.sales_cnt AS Decimal128(17, 2)) < Decimal128(Some(900000),23,6) | +| | SubqueryAlias: curr_yr | +| | SubqueryAlias: all_sales | +| | Projection: sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt | +| | Aggregate: groupBy=[[sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id]], aggr=[[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)]] | +| | SubqueryAlias: sales_detail | +| | Aggregate: groupBy=[[date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, sales_cnt, sales_amt]], aggr=[[]] | +| | Union | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, CAST(catalog_sales.cs_quantity AS Int64) - coalesce(CAST(catalog_returns.cr_return_quantity AS Int64), Int64(0)) AS sales_cnt, catalog_sales.cs_ext_sales_price - coalesce(CAST(catalog_returns.cr_return_amount AS Decimal128(30, 15)), Decimal128(Some(0),30,15)) AS sales_amt | +| | Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, CAST(store_sales.ss_quantity AS Int64) - coalesce(CAST(store_returns.sr_return_quantity AS Int64), Int64(0)) AS sales_cnt, store_sales.ss_ext_sales_price - coalesce(CAST(store_returns.sr_return_amt AS Decimal128(30, 15)), Decimal128(Some(0),30,15)) AS sales_amt | +| | Left Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, CAST(web_sales.ws_quantity AS Int64) - coalesce(CAST(web_returns.wr_return_quantity AS Int64), Int64(0)) AS sales_cnt, web_sales.ws_ext_sales_price - coalesce(CAST(web_returns.wr_return_amt AS Decimal128(30, 15)), Decimal128(Some(0),30,15)) AS sales_amt | +| | Left Join: web_sales.ws_order_number = web_returns.wr_order_number, web_sales.ws_item_sk = web_returns.wr_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| | SubqueryAlias: prev_yr | +| | SubqueryAlias: all_sales | +| | Projection: sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id, sum(sales_detail.sales_cnt) AS sales_cnt, sum(sales_detail.sales_amt) AS sales_amt | +| | Aggregate: groupBy=[[sales_detail.d_year, sales_detail.i_brand_id, sales_detail.i_class_id, sales_detail.i_category_id, sales_detail.i_manufact_id]], aggr=[[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)]] | +| | SubqueryAlias: sales_detail | +| | Aggregate: groupBy=[[date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, sales_cnt, sales_amt]], aggr=[[]] | +| | Union | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, CAST(catalog_sales.cs_quantity AS Int64) - coalesce(CAST(catalog_returns.cr_return_quantity AS Int64), Int64(0)) AS sales_cnt, catalog_sales.cs_ext_sales_price - coalesce(CAST(catalog_returns.cr_return_amount AS Decimal128(30, 15)), Decimal128(Some(0),30,15)) AS sales_amt | +| | Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_item_sk, catalog_sales.cs_order_number, catalog_sales.cs_quantity, catalog_sales.cs_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, CAST(store_sales.ss_quantity AS Int64) - coalesce(CAST(store_returns.sr_return_quantity AS Int64), Int64(0)) AS sales_cnt, store_sales.ss_ext_sales_price - coalesce(CAST(store_returns.sr_return_amt AS Decimal128(30, 15)), Decimal128(Some(0),30,15)) AS sales_amt | +| | Left Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_ticket_number, store_sales.ss_quantity, store_sales.ss_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | Projection: date_dim.d_year, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, CAST(web_sales.ws_quantity AS Int64) - coalesce(CAST(web_returns.wr_return_quantity AS Int64), Int64(0)) AS sales_cnt, web_sales.ws_ext_sales_price - coalesce(CAST(web_returns.wr_return_amt AS Decimal128(30, 15)), Decimal128(Some(0),30,15)) AS sales_amt | +| | Left Join: web_sales.ws_order_number = web_returns.wr_order_number, web_sales.ws_item_sk = web_returns.wr_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_order_number, web_sales.ws_quantity, web_sales.ws_ext_sales_price, item.i_brand_id, item.i_class_id, item.i_category_id, item.i_manufact_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], full_filters=[item.i_category = LargeUtf8("Shoes")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(1999)] | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| physical_plan | SortPreservingMergeExec: [sales_cnt_diff@8 ASC NULLS LAST, sales_amt_diff@9 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[sales_cnt_diff@8 ASC NULLS LAST, sales_amt_diff@9 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[d_year@7 as prev_year, d_year@0 as year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@8 as prev_yr_cnt, sales_cnt@5 as curr_yr_cnt, sales_cnt@5 - sales_cnt@8 as sales_cnt_diff, sales_amt@6 - sales_amt@9 as sales_amt_diff] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_brand_id@1, i_brand_id@1), (i_class_id@2, i_class_id@2), (i_category_id@3, i_category_id@3), (i_manufact_id@4, i_manufact_id@4)], filter=CAST(sales_cnt@0 AS Decimal128(17, 2)) / CAST(sales_cnt@1 AS Decimal128(17, 2)) < Some(900000),23,6, projection=[d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4, sales_cnt@5, sales_amt@6, d_year@7, sales_cnt@12, sales_amt@13] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 24), input_partitions=24 | +| | ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sum(sales_detail.sales_cnt)@5 as sales_cnt, sum(sales_detail.sales_amt)@6 as sales_amt] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4, sales_cnt@5, sales_amt@6], 24), input_partitions=72 | +| | AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[] | +| | UnionExec | +| | ProjectionExec: expr=[d_year@6 as d_year, i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id, i_manufact_id@5 as i_manufact_id, CAST(cs_quantity@0 AS Int64) - coalesce(CAST(cr_return_quantity@7 AS Int64), 0) as sales_cnt, cs_ext_sales_price@1 - coalesce(CAST(cr_return_amount@8 AS Decimal128(30, 15)), Some(0),30,15) as sales_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_order_number@1, cr_order_number@1), (cs_item_sk@0, cr_item_sk@0)], projection=[cs_quantity@2, cs_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, cr_return_quantity@11, cr_return_amount@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_order_number@1, cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_item_sk@1, cs_order_number@2, cs_quantity@3, cs_ext_sales_price@4, i_brand_id@5, i_class_id@6, i_category_id@7, i_manufact_id@8, d_year@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@1, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@1, cs_order_number@2, cs_quantity@3, cs_ext_sales_price@4, i_brand_id@6, i_class_id@7, i_category_id@8, i_manufact_id@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_order_number@1, cr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | ProjectionExec: expr=[d_year@6 as d_year, i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id, i_manufact_id@5 as i_manufact_id, CAST(ss_quantity@0 AS Int64) - coalesce(CAST(sr_return_quantity@7 AS Int64), 0) as sales_cnt, ss_ext_sales_price@1 - coalesce(CAST(sr_return_amt@8 AS Decimal128(30, 15)), Some(0),30,15) as sales_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_ticket_number@1, sr_ticket_number@1), (ss_item_sk@0, sr_item_sk@0)], projection=[ss_quantity@2, ss_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, sr_return_quantity@11, sr_return_amt@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@1, ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_ticket_number@2, ss_quantity@3, ss_ext_sales_price@4, i_brand_id@5, i_class_id@6, i_category_id@7, i_manufact_id@8, d_year@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_ticket_number@2, ss_quantity@3, ss_ext_sales_price@4, i_brand_id@6, i_class_id@7, i_category_id@8, i_manufact_id@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_ticket_number@1, sr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | ProjectionExec: expr=[d_year@6 as d_year, i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id, i_manufact_id@5 as i_manufact_id, CAST(ws_quantity@0 AS Int64) - coalesce(CAST(wr_return_quantity@7 AS Int64), 0) as sales_cnt, ws_ext_sales_price@1 - coalesce(CAST(wr_return_amt@8 AS Decimal128(30, 15)), Some(0),30,15) as sales_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ws_order_number@1, wr_order_number@1), (ws_item_sk@0, wr_item_sk@0)], projection=[ws_quantity@2, ws_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, wr_return_quantity@11, wr_return_amt@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1, ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_order_number@2, ws_quantity@3, ws_ext_sales_price@4, i_brand_id@5, i_class_id@6, i_category_id@7, i_manufact_id@8, d_year@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@1, i_item_sk@0)], projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_order_number@2, ws_quantity@3, ws_ext_sales_price@4, i_brand_id@6, i_class_id@7, i_category_id@8, i_manufact_id@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2000, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2000 AND 2000 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_order_number@1, wr_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 24), input_partitions=24 | +| | ProjectionExec: expr=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sum(sales_detail.sales_cnt)@5 as sales_cnt, sum(sales_detail.sales_amt)@6 as sales_amt] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id], aggr=[sum(sales_detail.sales_cnt), sum(sales_detail.sales_amt)] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, i_brand_id@1, i_class_id@2, i_category_id@3, i_manufact_id@4, sales_cnt@5, sales_amt@6], 24), input_partitions=72 | +| | AggregateExec: mode=Partial, gby=[d_year@0 as d_year, i_brand_id@1 as i_brand_id, i_class_id@2 as i_class_id, i_category_id@3 as i_category_id, i_manufact_id@4 as i_manufact_id, sales_cnt@5 as sales_cnt, sales_amt@6 as sales_amt], aggr=[] | +| | UnionExec | +| | ProjectionExec: expr=[d_year@6 as d_year, i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id, i_manufact_id@5 as i_manufact_id, CAST(cs_quantity@0 AS Int64) - coalesce(CAST(cr_return_quantity@7 AS Int64), 0) as sales_cnt, cs_ext_sales_price@1 - coalesce(CAST(cr_return_amount@8 AS Decimal128(30, 15)), Some(0),30,15) as sales_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_order_number@1, cr_order_number@1), (cs_item_sk@0, cr_item_sk@0)], projection=[cs_quantity@2, cs_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, cr_return_quantity@11, cr_return_amount@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_order_number@1, cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_item_sk@1, cs_order_number@2, cs_quantity@3, cs_ext_sales_price@4, i_brand_id@5, i_class_id@6, i_category_id@7, i_manufact_id@8, d_year@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@1, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_item_sk@1, cs_order_number@2, cs_quantity@3, cs_ext_sales_price@4, i_brand_id@6, i_class_id@7, i_category_id@8, i_manufact_id@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_order_number, cs_quantity, cs_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_order_number@1, cr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number, cr_return_quantity, cr_return_amount] | +| | ProjectionExec: expr=[d_year@6 as d_year, i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id, i_manufact_id@5 as i_manufact_id, CAST(ss_quantity@0 AS Int64) - coalesce(CAST(sr_return_quantity@7 AS Int64), 0) as sales_cnt, ss_ext_sales_price@1 - coalesce(CAST(sr_return_amt@8 AS Decimal128(30, 15)), Some(0),30,15) as sales_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_ticket_number@1, sr_ticket_number@1), (ss_item_sk@0, sr_item_sk@0)], projection=[ss_quantity@2, ss_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, sr_return_quantity@11, sr_return_amt@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@1, ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_ticket_number@2, ss_quantity@3, ss_ext_sales_price@4, i_brand_id@5, i_class_id@6, i_category_id@7, i_manufact_id@8, d_year@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_ticket_number@2, ss_quantity@3, ss_ext_sales_price@4, i_brand_id@6, i_class_id@7, i_category_id@8, i_manufact_id@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ticket_number, ss_quantity, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_ticket_number@1, sr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_ticket_number, sr_return_quantity, sr_return_amt] | +| | ProjectionExec: expr=[d_year@6 as d_year, i_brand_id@2 as i_brand_id, i_class_id@3 as i_class_id, i_category_id@4 as i_category_id, i_manufact_id@5 as i_manufact_id, CAST(ws_quantity@0 AS Int64) - coalesce(CAST(wr_return_quantity@7 AS Int64), 0) as sales_cnt, ws_ext_sales_price@1 - coalesce(CAST(wr_return_amt@8 AS Decimal128(30, 15)), Some(0),30,15) as sales_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ws_order_number@1, wr_order_number@1), (ws_item_sk@0, wr_item_sk@0)], projection=[ws_quantity@2, ws_ext_sales_price@3, i_brand_id@4, i_class_id@5, i_category_id@6, i_manufact_id@7, d_year@8, wr_return_quantity@11, wr_return_amt@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1, ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_order_number@2, ws_quantity@3, ws_ext_sales_price@4, i_brand_id@5, i_class_id@6, i_category_id@7, i_manufact_id@8, d_year@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@1, i_item_sk@0)], projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_order_number@2, ws_quantity@3, ws_ext_sales_price@4, i_brand_id@6, i_class_id@7, i_category_id@8, i_manufact_id@9] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_order_number, ws_quantity, ws_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand_id, i_class_id, i_category_id, i_manufact_id], predicate=i_category@12 = Shoes, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 1999, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1999 AND 1999 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_order_number@1, wr_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_item_sk, wr_order_number, wr_return_quantity, wr_return_amt] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q76_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q76_explain.snap new file mode 100644 index 0000000000..6e029d3218 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q76_explain.snap @@ -0,0 +1,115 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q76" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: foo.channel ASC NULLS LAST, foo.col_name ASC NULLS LAST, foo.d_year ASC NULLS LAST, foo.d_qoy ASC NULLS LAST, foo.i_category ASC NULLS LAST, fetch=100 | +| | Projection: foo.channel, foo.col_name, foo.d_year, foo.d_qoy, foo.i_category, count(*) AS sales_cnt, sum(foo.ext_sales_price) AS sales_amt | +| | Aggregate: groupBy=[[foo.channel, foo.col_name, foo.d_year, foo.d_qoy, foo.i_category]], aggr=[[count(Int64(1)) AS count(*), sum(foo.ext_sales_price)]] | +| | SubqueryAlias: foo | +| | Union | +| | Projection: Utf8("store") AS channel, Utf8("ss_customer_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, store_sales.ss_ext_sales_price AS ext_sales_price | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, item.i_category | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], full_filters=[store_sales.ss_customer_sk IS NULL] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_category] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | Projection: Utf8("web") AS channel, Utf8("ws_ship_hdemo_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, web_sales.ws_ext_sales_price AS ext_sales_price | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_sales_price, item.i_category | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price], full_filters=[web_sales.ws_ship_hdemo_sk IS NULL] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_category] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| | Projection: Utf8("catalog") AS channel, Utf8("cs_bill_customer_sk") AS col_name, date_dim.d_year, date_dim.d_qoy, item.i_category, catalog_sales.cs_ext_sales_price AS ext_sales_price | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ext_sales_price, item.i_category | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price], full_filters=[catalog_sales.cs_bill_customer_sk IS NULL] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_category] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year, d_qoy] | +| physical_plan | SortPreservingMergeExec: [channel@0 ASC NULLS LAST, col_name@1 ASC NULLS LAST, d_year@2 ASC NULLS LAST, d_qoy@3 ASC NULLS LAST, i_category@4 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[channel@0 ASC NULLS LAST, col_name@1 ASC NULLS LAST, d_year@2 ASC NULLS LAST, d_qoy@3 ASC NULLS LAST, i_category@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[channel@0 as channel, col_name@1 as col_name, d_year@2 as d_year, d_qoy@3 as d_qoy, i_category@4 as i_category, count(*)@5 as sales_cnt, sum(foo.ext_sales_price)@6 as sales_amt] | +| | AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, col_name@1 as col_name, d_year@2 as d_year, d_qoy@3 as d_qoy, i_category@4 as i_category], aggr=[count(*), sum(foo.ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([channel@0, col_name@1, d_year@2, d_qoy@3, i_category@4], 24), input_partitions=72 | +| | AggregateExec: mode=Partial, gby=[channel@0 as channel, col_name@1 as col_name, d_year@2 as d_year, d_qoy@3 as d_qoy, i_category@4 as i_category], aggr=[count(*), sum(foo.ext_sales_price)], ordering_mode=PartiallySorted([0, 1]) | +| | UnionExec | +| | ProjectionExec: expr=[store as channel, ss_customer_sk as col_name, d_year@4 as d_year, d_qoy@5 as d_qoy, i_category@2 as i_category, ss_ext_sales_price@1 as ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[ss_sold_date_sk@0, ss_ext_sales_price@2, i_category@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price], predicate=ss_customer_sk@3 IS NULL, pruning_predicate=ss_customer_sk_null_count@0 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy] | +| | ProjectionExec: expr=[web as channel, ws_ship_hdemo_sk as col_name, d_year@4 as d_year, d_qoy@5 as d_qoy, i_category@2 as i_category, ws_ext_sales_price@1 as ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@1, i_item_sk@0)], projection=[ws_sold_date_sk@0, ws_ext_sales_price@2, i_category@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_sales_price], predicate=ws_ship_hdemo_sk@10 IS NULL, pruning_predicate=ws_ship_hdemo_sk_null_count@0 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy] | +| | ProjectionExec: expr=[catalog as channel, cs_bill_customer_sk as col_name, d_year@4 as d_year, d_qoy@5 as d_qoy, i_category@2 as i_category, cs_ext_sales_price@1 as ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@1, i_item_sk@0)], projection=[cs_sold_date_sk@0, cs_ext_sales_price@2, i_category@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_item_sk, cs_ext_sales_price], predicate=cs_bill_customer_sk@3 IS NULL, pruning_predicate=cs_bill_customer_sk_null_count@0 > 0, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_category] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year, d_qoy] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q77_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q77_explain.snap new file mode 100644 index 0000000000..9c0b49762a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q77_explain.snap @@ -0,0 +1,228 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q77" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: x.channel ASC NULLS LAST, x.id ASC NULLS LAST, fetch=100 | +| | Projection: x.channel, x.id, sum(x.sales) AS sales, sum(x.returns) AS returns, sum(x.profit) AS profit | +| | Aggregate: groupBy=[[ROLLUP (x.channel, x.id)]], aggr=[[sum(x.sales), sum(x.returns), sum(x.profit)]] | +| | SubqueryAlias: x | +| | Union | +| | Projection: Utf8("store channel") AS channel, ss.s_store_sk AS id, ss.sales, coalesce(CAST(sr.returns AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) AS returns, ss.profit - coalesce(CAST(sr.profit_loss AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) AS profit | +| | Left Join: ss.s_store_sk = sr.s_store_sk | +| | SubqueryAlias: ss | +| | Projection: store.s_store_sk, sum(store_sales.ss_ext_sales_price) AS sales, sum(store_sales.ss_net_profit) AS profit | +| | Aggregate: groupBy=[[store.s_store_sk]], aggr=[[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_net_profit)]] | +| | Projection: store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store.s_store_sk | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-11"), date_dim.d_date <= Date32("2001-09-10")] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk] | +| | SubqueryAlias: sr | +| | Projection: store.s_store_sk, sum(store_returns.sr_return_amt) AS returns, sum(store_returns.sr_net_loss) AS profit_loss | +| | Aggregate: groupBy=[[store.s_store_sk]], aggr=[[sum(store_returns.sr_return_amt), sum(store_returns.sr_net_loss)]] | +| | Projection: store_returns.sr_return_amt, store_returns.sr_net_loss, store.s_store_sk | +| | Inner Join: store_returns.sr_store_sk = store.s_store_sk | +| | Projection: store_returns.sr_store_sk, store_returns.sr_return_amt, store_returns.sr_net_loss | +| | Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_store_sk, sr_return_amt, sr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-11"), date_dim.d_date <= Date32("2001-09-10")] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk] | +| | Projection: Utf8("catalog channel") AS channel, cs.cs_call_center_sk AS id, cs.sales, CAST(cr.returns AS Decimal128(22, 2)) AS returns, CAST(cs.profit - cr.profit_loss AS Decimal128(23, 2)) AS profit | +| | Cross Join: | +| | SubqueryAlias: cs | +| | Projection: catalog_sales.cs_call_center_sk, sum(catalog_sales.cs_ext_sales_price) AS sales, sum(catalog_sales.cs_net_profit) AS profit | +| | Aggregate: groupBy=[[catalog_sales.cs_call_center_sk]], aggr=[[sum(catalog_sales.cs_ext_sales_price), sum(catalog_sales.cs_net_profit)]] | +| | Projection: catalog_sales.cs_call_center_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_call_center_sk, cs_ext_sales_price, cs_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-11"), date_dim.d_date <= Date32("2001-09-10")] | +| | SubqueryAlias: cr | +| | Projection: sum(catalog_returns.cr_return_amount) AS returns, sum(catalog_returns.cr_net_loss) AS profit_loss | +| | Aggregate: groupBy=[[catalog_returns.cr_call_center_sk]], aggr=[[sum(catalog_returns.cr_return_amount), sum(catalog_returns.cr_net_loss)]] | +| | Projection: catalog_returns.cr_call_center_sk, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss | +| | Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_call_center_sk, cr_return_amount, cr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-11"), date_dim.d_date <= Date32("2001-09-10")] | +| | Projection: Utf8("web channel") AS channel, ws.wp_web_page_sk AS id, ws.sales, coalesce(CAST(wr.returns AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) AS returns, ws.profit - coalesce(CAST(wr.profit_loss AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) AS profit | +| | Left Join: ws.wp_web_page_sk = wr.wp_web_page_sk | +| | SubqueryAlias: ws | +| | Projection: web_page.wp_web_page_sk, sum(web_sales.ws_ext_sales_price) AS sales, sum(web_sales.ws_net_profit) AS profit | +| | Aggregate: groupBy=[[web_page.wp_web_page_sk]], aggr=[[sum(web_sales.ws_ext_sales_price), sum(web_sales.ws_net_profit)]] | +| | Projection: web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_page.wp_web_page_sk | +| | Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk | +| | Projection: web_sales.ws_web_page_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_web_page_sk, ws_ext_sales_price, ws_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-11"), date_dim.d_date <= Date32("2001-09-10")] | +| | BytesProcessedNode | +| | TableScan: web_page projection=[wp_web_page_sk] | +| | SubqueryAlias: wr | +| | Projection: web_page.wp_web_page_sk, sum(web_returns.wr_return_amt) AS returns, sum(web_returns.wr_net_loss) AS profit_loss | +| | Aggregate: groupBy=[[web_page.wp_web_page_sk]], aggr=[[sum(web_returns.wr_return_amt), sum(web_returns.wr_net_loss)]] | +| | Projection: web_returns.wr_return_amt, web_returns.wr_net_loss, web_page.wp_web_page_sk | +| | Inner Join: web_returns.wr_web_page_sk = web_page.wp_web_page_sk | +| | Projection: web_returns.wr_web_page_sk, web_returns.wr_return_amt, web_returns.wr_net_loss | +| | Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_returned_date_sk, wr_web_page_sk, wr_return_amt, wr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-08-11"), date_dim.d_date <= Date32("2001-09-10")] | +| | BytesProcessedNode | +| | TableScan: web_page projection=[wp_web_page_sk] | +| physical_plan | SortPreservingMergeExec: [channel@0 ASC NULLS LAST, id@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[channel@0 ASC NULLS LAST, id@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[channel@0 as channel, id@1 as id, sum(x.sales)@3 as sales, sum(x.returns)@4 as returns, sum(x.profit)@5 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, id@1 as id, __grouping_id@2 as __grouping_id], aggr=[sum(x.sales), sum(x.returns), sum(x.profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([channel@0, id@1, __grouping_id@2], 24), input_partitions=72 | +| | AggregateExec: mode=Partial, gby=[(NULL as channel, NULL as id), (channel@0 as channel, NULL as id), (channel@0 as channel, id@1 as id)], aggr=[sum(x.sales), sum(x.returns), sum(x.profit)] | +| | UnionExec | +| | ProjectionExec: expr=[store channel as channel, s_store_sk@0 as id, sales@1 as sales, coalesce(CAST(returns@4 AS Decimal128(22, 2)), Some(0),22,2) as returns, profit@2 - coalesce(CAST(profit_loss@5 AS Decimal128(22, 2)), Some(0),22,2) as profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(s_store_sk@0, s_store_sk@0)] | +| | ProjectionExec: expr=[s_store_sk@0 as s_store_sk, sum(store_sales.ss_ext_sales_price)@1 as sales, sum(store_sales.ss_net_profit)@2 as profit] | +| | AggregateExec: mode=SinglePartitioned, gby=[s_store_sk@2 as s_store_sk], aggr=[sum(store_sales.ss_ext_sales_price), sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)], projection=[ss_ext_sales_price@1, ss_net_profit@2, s_store_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_store_sk@1, ss_ext_sales_price@2, ss_net_profit@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_ext_sales_price, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-11 AND d_date@2 <= 2001-09-10, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-11 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-09-10, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk] | +| | ProjectionExec: expr=[s_store_sk@0 as s_store_sk, sum(store_returns.sr_return_amt)@1 as returns, sum(store_returns.sr_net_loss)@2 as profit_loss] | +| | AggregateExec: mode=SinglePartitioned, gby=[s_store_sk@2 as s_store_sk], aggr=[sum(store_returns.sr_return_amt), sum(store_returns.sr_net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_store_sk@0, s_store_sk@0)], projection=[sr_return_amt@1, sr_net_loss@2, s_store_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@0, d_date_sk@0)], projection=[sr_store_sk@1, sr_return_amt@2, sr_net_loss@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_store_sk, sr_return_amt, sr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-11 AND d_date@2 <= 2001-09-10, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-11 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-09-10, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk] | +| | ProjectionExec: expr=[catalog channel as channel, cs_call_center_sk@0 as id, sales@1 as sales, CAST(returns@3 AS Decimal128(22, 2)) as returns, CAST(profit@2 - profit_loss@4 AS Decimal128(23, 2)) as profit] | +| | CrossJoinExec | +| | CoalescePartitionsExec | +| | ProjectionExec: expr=[cs_call_center_sk@0 as cs_call_center_sk, sum(catalog_sales.cs_ext_sales_price)@1 as sales, sum(catalog_sales.cs_net_profit)@2 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[cs_call_center_sk@0 as cs_call_center_sk], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(catalog_sales.cs_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_call_center_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cs_call_center_sk@0 as cs_call_center_sk], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(catalog_sales.cs_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_call_center_sk@1, cs_ext_sales_price@2, cs_net_profit@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_call_center_sk, cs_ext_sales_price, cs_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-11 AND d_date@2 <= 2001-09-10, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-11 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-09-10, required_guarantees=[N] | +| | ProjectionExec: expr=[sum(catalog_returns.cr_return_amount)@1 as returns, sum(catalog_returns.cr_net_loss)@2 as profit_loss] | +| | AggregateExec: mode=FinalPartitioned, gby=[cr_call_center_sk@0 as cr_call_center_sk], aggr=[sum(catalog_returns.cr_return_amount), sum(catalog_returns.cr_net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_call_center_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cr_call_center_sk@0 as cr_call_center_sk], aggr=[sum(catalog_returns.cr_return_amount), sum(catalog_returns.cr_net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returned_date_sk@0, d_date_sk@0)], projection=[cr_call_center_sk@1, cr_return_amount@2, cr_net_loss@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returned_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_returned_date_sk, cr_call_center_sk, cr_return_amount, cr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-11 AND d_date@2 <= 2001-09-10, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-11 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-09-10, required_guarantees=[N] | +| | ProjectionExec: expr=[web channel as channel, wp_web_page_sk@0 as id, sales@1 as sales, coalesce(CAST(returns@4 AS Decimal128(22, 2)), Some(0),22,2) as returns, profit@2 - coalesce(CAST(profit_loss@5 AS Decimal128(22, 2)), Some(0),22,2) as profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(wp_web_page_sk@0, wp_web_page_sk@0)] | +| | ProjectionExec: expr=[wp_web_page_sk@0 as wp_web_page_sk, sum(web_sales.ws_ext_sales_price)@1 as sales, sum(web_sales.ws_net_profit)@2 as profit] | +| | AggregateExec: mode=SinglePartitioned, gby=[wp_web_page_sk@2 as wp_web_page_sk], aggr=[sum(web_sales.ws_ext_sales_price), sum(web_sales.ws_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_page_sk@0, wp_web_page_sk@0)], projection=[ws_ext_sales_price@1, ws_net_profit@2, wp_web_page_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_page_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_web_page_sk@1, ws_ext_sales_price@2, ws_net_profit@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_web_page_sk, ws_ext_sales_price, ws_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-11 AND d_date@2 <= 2001-09-10, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-11 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-09-10, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wp_web_page_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_page/web_page.parquet]]}, projection=[wp_web_page_sk] | +| | ProjectionExec: expr=[wp_web_page_sk@0 as wp_web_page_sk, sum(web_returns.wr_return_amt)@1 as returns, sum(web_returns.wr_net_loss)@2 as profit_loss] | +| | AggregateExec: mode=SinglePartitioned, gby=[wp_web_page_sk@2 as wp_web_page_sk], aggr=[sum(web_returns.wr_return_amt), sum(web_returns.wr_net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_web_page_sk@0, wp_web_page_sk@0)], projection=[wr_return_amt@1, wr_net_loss@2, wp_web_page_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_web_page_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_returned_date_sk@0, d_date_sk@0)], projection=[wr_web_page_sk@1, wr_return_amt@2, wr_net_loss@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returned_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_returned_date_sk, wr_web_page_sk, wr_return_amt, wr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-08-11 AND d_date@2 <= 2001-09-10, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-08-11 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-09-10, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wp_web_page_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_page/web_page.parquet]]}, projection=[wp_web_page_sk] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q78_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q78_explain.snap new file mode 100644 index 0000000000..141327cb0a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q78_explain.snap @@ -0,0 +1,153 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q78" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: ss.ss_customer_sk, ratio, store_qty, store_wholesale_cost, store_sales_price, other_chan_qty, other_chan_wholesale_cost, other_chan_sales_price | +| | Sort: ss.ss_customer_sk ASC NULLS LAST, ss.ss_qty DESC NULLS FIRST, ss.ss_wc DESC NULLS FIRST, ss.ss_sp DESC NULLS FIRST, other_chan_qty ASC NULLS LAST, other_chan_wholesale_cost ASC NULLS LAST, other_chan_sales_price ASC NULLS LAST, ratio ASC NULLS LAST, fetch=100 | +| | Projection: ss.ss_customer_sk, round(CAST(ss.ss_qty / __common_expr_1 AS Float64), Int64(2)) AS ratio, ss.ss_qty AS store_qty, ss.ss_wc AS store_wholesale_cost, ss.ss_sp AS store_sales_price, __common_expr_1 AS other_chan_qty, coalesce(CAST(ws.ws_wc AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) + coalesce(CAST(cs.cs_wc AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) AS other_chan_wholesale_cost, coalesce(CAST(ws.ws_sp AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) + coalesce(CAST(cs.cs_sp AS Decimal128(22, 2)), Decimal128(Some(0),22,2)) AS other_chan_sales_price, ss.ss_qty, ss.ss_wc, ss.ss_sp | +| | Projection: coalesce(ws.ws_qty, Int64(0)) + coalesce(cs.cs_qty, Int64(0)) AS __common_expr_1, ss.ss_customer_sk, ss.ss_qty, ss.ss_wc, ss.ss_sp, ws.ws_wc, ws.ws_sp, cs.cs_wc, cs.cs_sp | +| | Filter: coalesce(ws.ws_qty, Int64(0)) > Int64(0) OR coalesce(cs.cs_qty, Int64(0)) > Int64(0) | +| | Projection: ss.ss_customer_sk, ss.ss_qty, ss.ss_wc, ss.ss_sp, ws.ws_qty, ws.ws_wc, ws.ws_sp, cs.cs_qty, cs.cs_wc, cs.cs_sp | +| | Left Join: ss.ss_sold_year = cs.cs_sold_year, ss.ss_item_sk = cs.cs_item_sk, ss.ss_customer_sk = cs.cs_customer_sk | +| | Projection: ss.ss_sold_year, ss.ss_item_sk, ss.ss_customer_sk, ss.ss_qty, ss.ss_wc, ss.ss_sp, ws.ws_qty, ws.ws_wc, ws.ws_sp | +| | Left Join: ss.ss_sold_year = ws.ws_sold_year, ss.ss_item_sk = ws.ws_item_sk, ss.ss_customer_sk = ws.ws_customer_sk | +| | SubqueryAlias: ss | +| | Projection: date_dim.d_year AS ss_sold_year, store_sales.ss_item_sk, store_sales.ss_customer_sk, sum(store_sales.ss_quantity) AS ss_qty, sum(store_sales.ss_wholesale_cost) AS ss_wc, sum(store_sales.ss_sales_price) AS ss_sp | +| | Aggregate: groupBy=[[date_dim.d_year, store_sales.ss_item_sk, store_sales.ss_customer_sk]], aggr=[[sum(CAST(store_sales.ss_quantity AS Int64)), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_sales_price)]] | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_sales_price, date_dim.d_year | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_sales_price | +| | Filter: store_returns.sr_ticket_number IS NULL | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_wholesale_cost, store_sales.ss_sales_price, store_returns.sr_ticket_number | +| | Left Join: store_sales.ss_ticket_number = store_returns.sr_ticket_number, store_sales.ss_item_sk = store_returns.sr_item_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_wholesale_cost, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year], full_filters=[date_dim.d_year = Int32(2001)] | +| | SubqueryAlias: ws | +| | Projection: date_dim.d_year AS ws_sold_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk AS ws_customer_sk, sum(web_sales.ws_quantity) AS ws_qty, sum(web_sales.ws_wholesale_cost) AS ws_wc, sum(web_sales.ws_sales_price) AS ws_sp | +| | Aggregate: groupBy=[[date_dim.d_year, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk]], aggr=[[sum(CAST(web_sales.ws_quantity AS Int64)), sum(web_sales.ws_wholesale_cost), sum(web_sales.ws_sales_price)]] | +| | Projection: web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_sales_price, date_dim.d_year | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_sales_price | +| | Filter: web_returns.wr_order_number IS NULL | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_bill_customer_sk, web_sales.ws_quantity, web_sales.ws_wholesale_cost, web_sales.ws_sales_price, web_returns.wr_order_number | +| | Left Join: web_sales.ws_order_number = web_returns.wr_order_number, web_sales.ws_item_sk = web_returns.wr_item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_order_number, ws_quantity, ws_wholesale_cost, ws_sales_price] | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| | SubqueryAlias: cs | +| | Projection: date_dim.d_year AS cs_sold_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk AS cs_customer_sk, sum(catalog_sales.cs_quantity) AS cs_qty, sum(catalog_sales.cs_wholesale_cost) AS cs_wc, sum(catalog_sales.cs_sales_price) AS cs_sp | +| | Aggregate: groupBy=[[date_dim.d_year, catalog_sales.cs_item_sk, catalog_sales.cs_bill_customer_sk]], aggr=[[sum(CAST(catalog_sales.cs_quantity AS Int64)), sum(catalog_sales.cs_wholesale_cost), sum(catalog_sales.cs_sales_price)]] | +| | Projection: catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_sales_price, date_dim.d_year | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_sales_price | +| | Filter: catalog_returns.cr_order_number IS NULL | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk, catalog_sales.cs_quantity, catalog_sales.cs_wholesale_cost, catalog_sales.cs_sales_price, catalog_returns.cr_order_number | +| | Left Join: catalog_sales.cs_order_number = catalog_returns.cr_order_number, catalog_sales.cs_item_sk = catalog_returns.cr_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_order_number, cs_quantity, cs_wholesale_cost, cs_sales_price] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_year] | +| physical_plan | ProjectionExec: expr=[ss_customer_sk@0 as ss_customer_sk, ratio@1 as ratio, store_qty@2 as store_qty, store_wholesale_cost@3 as store_wholesale_cost, store_sales_price@4 as store_sales_price, other_chan_qty@5 as other_chan_qty, other_chan_wholesale_cost@6 as other_chan_wholesale_cost, other_chan_sales_price@7 as other_chan_sales_price] | +| | SortPreservingMergeExec: [ss_customer_sk@0 ASC NULLS LAST, ss_qty@8 DESC, ss_wc@9 DESC, ss_sp@10 DESC, other_chan_qty@5 ASC NULLS LAST, other_chan_wholesale_cost@6 ASC NULLS LAST, other_chan_sales_price@7 ASC NULLS LAST, ratio@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[ss_customer_sk@0 ASC NULLS LAST, ss_qty@8 DESC, ss_wc@9 DESC, ss_sp@10 DESC, other_chan_qty@5 ASC NULLS LAST, other_chan_wholesale_cost@6 ASC NULLS LAST, other_chan_sales_price@7 ASC NULLS LAST, ratio@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ss_customer_sk@1 as ss_customer_sk, round(CAST(ss_qty@2 / __common_expr_1@0 AS Float64), 2) as ratio, ss_qty@2 as store_qty, ss_wc@3 as store_wholesale_cost, ss_sp@4 as store_sales_price, __common_expr_1@0 as other_chan_qty, coalesce(CAST(ws_wc@5 AS Decimal128(22, 2)), Some(0),22,2) + coalesce(CAST(cs_wc@7 AS Decimal128(22, 2)), Some(0),22,2) as other_chan_wholesale_cost, coalesce(CAST(ws_sp@6 AS Decimal128(22, 2)), Some(0),22,2) + coalesce(CAST(cs_sp@8 AS Decimal128(22, 2)), Some(0),22,2) as other_chan_sales_price, ss_qty@2 as ss_qty, ss_wc@3 as ss_wc, ss_sp@4 as ss_sp] | +| | ProjectionExec: expr=[coalesce(ws_qty@4, 0) + coalesce(cs_qty@7, 0) as __common_expr_1, ss_customer_sk@0 as ss_customer_sk, ss_qty@1 as ss_qty, ss_wc@2 as ss_wc, ss_sp@3 as ss_sp, ws_wc@5 as ws_wc, ws_sp@6 as ws_sp, cs_wc@8 as cs_wc, cs_sp@9 as cs_sp] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: coalesce(ws_qty@4, 0) > 0 OR coalesce(cs_qty@7, 0) > 0 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_sold_year@0, cs_sold_year@0), (ss_item_sk@1, cs_item_sk@1), (ss_customer_sk@2, cs_customer_sk@2)], projection=[ss_customer_sk@2, ss_qty@3, ss_wc@4, ss_sp@5, ws_qty@6, ws_wc@7, ws_sp@8, cs_qty@12, cs_wc@13, cs_sp@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_sold_year@0, ws_sold_year@0), (ss_item_sk@1, ws_item_sk@1), (ss_customer_sk@2, ws_customer_sk@2)], projection=[ss_sold_year@0, ss_item_sk@1, ss_customer_sk@2, ss_qty@3, ss_wc@4, ss_sp@5, ws_qty@9, ws_wc@10, ws_sp@11] | +| | ProjectionExec: expr=[d_year@0 as ss_sold_year, ss_item_sk@1 as ss_item_sk, ss_customer_sk@2 as ss_customer_sk, sum(store_sales.ss_quantity)@3 as ss_qty, sum(store_sales.ss_wholesale_cost)@4 as ss_wc, sum(store_sales.ss_sales_price)@5 as ss_sp] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, ss_item_sk@1 as ss_item_sk, ss_customer_sk@2 as ss_customer_sk], aggr=[sum(store_sales.ss_quantity), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, ss_item_sk@1, ss_customer_sk@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@5 as d_year, ss_item_sk@0 as ss_item_sk, ss_customer_sk@1 as ss_customer_sk], aggr=[sum(store_sales.ss_quantity), sum(store_sales.ss_wholesale_cost), sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_customer_sk@2, ss_quantity@3, ss_wholesale_cost@4, ss_sales_price@5, d_year@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: sr_ticket_number@6 IS NULL, projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_quantity@3, ss_wholesale_cost@4, ss_sales_price@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_ticket_number@3, sr_ticket_number@1), (ss_item_sk@1, sr_item_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_customer_sk@2, ss_quantity@4, ss_wholesale_cost@5, ss_sales_price@6, sr_ticket_number@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@3, ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_wholesale_cost, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_ticket_number@1, sr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_ticket_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[d_year@0 as ws_sold_year, ws_item_sk@1 as ws_item_sk, ws_bill_customer_sk@2 as ws_customer_sk, sum(web_sales.ws_quantity)@3 as ws_qty, sum(web_sales.ws_wholesale_cost)@4 as ws_wc, sum(web_sales.ws_sales_price)@5 as ws_sp] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, ws_item_sk@1 as ws_item_sk, ws_bill_customer_sk@2 as ws_bill_customer_sk], aggr=[sum(web_sales.ws_quantity), sum(web_sales.ws_wholesale_cost), sum(web_sales.ws_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, ws_item_sk@1, ws_bill_customer_sk@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@5 as d_year, ws_item_sk@0 as ws_item_sk, ws_bill_customer_sk@1 as ws_bill_customer_sk], aggr=[sum(web_sales.ws_quantity), sum(web_sales.ws_wholesale_cost), sum(web_sales.ws_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_bill_customer_sk@2, ws_quantity@3, ws_wholesale_cost@4, ws_sales_price@5, d_year@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: wr_order_number@6 IS NULL, projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_bill_customer_sk@2, ws_quantity@3, ws_wholesale_cost@4, ws_sales_price@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ws_order_number@3, wr_order_number@1), (ws_item_sk@1, wr_item_sk@0)], projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_bill_customer_sk@2, ws_quantity@4, ws_wholesale_cost@5, ws_sales_price@6, wr_order_number@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@3, ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_bill_customer_sk, ws_order_number, ws_quantity, ws_wholesale_cost, ws_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_order_number@1, wr_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_item_sk, wr_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year] | +| | ProjectionExec: expr=[d_year@0 as cs_sold_year, cs_item_sk@1 as cs_item_sk, cs_bill_customer_sk@2 as cs_customer_sk, sum(catalog_sales.cs_quantity)@3 as cs_qty, sum(catalog_sales.cs_wholesale_cost)@4 as cs_wc, sum(catalog_sales.cs_sales_price)@5 as cs_sp] | +| | AggregateExec: mode=FinalPartitioned, gby=[d_year@0 as d_year, cs_item_sk@1 as cs_item_sk, cs_bill_customer_sk@2 as cs_bill_customer_sk], aggr=[sum(catalog_sales.cs_quantity), sum(catalog_sales.cs_wholesale_cost), sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_year@0, cs_item_sk@1, cs_bill_customer_sk@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[d_year@5 as d_year, cs_item_sk@1 as cs_item_sk, cs_bill_customer_sk@0 as cs_bill_customer_sk], aggr=[sum(catalog_sales.cs_quantity), sum(catalog_sales.cs_wholesale_cost), sum(catalog_sales.cs_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_bill_customer_sk@1, cs_item_sk@2, cs_quantity@3, cs_wholesale_cost@4, cs_sales_price@5, d_year@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: cr_order_number@6 IS NULL, projection=[cs_sold_date_sk@0, cs_bill_customer_sk@1, cs_item_sk@2, cs_quantity@3, cs_wholesale_cost@4, cs_sales_price@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_order_number@3, cr_order_number@1), (cs_item_sk@2, cr_item_sk@0)], projection=[cs_sold_date_sk@0, cs_bill_customer_sk@1, cs_item_sk@2, cs_quantity@4, cs_wholesale_cost@5, cs_sales_price@6, cr_order_number@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_order_number@3, cs_item_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk, cs_order_number, cs_quantity, cs_wholesale_cost, cs_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_order_number@1, cr_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_year] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q79_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q79_explain.snap new file mode 100644 index 0000000000..602f01a9ea --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q79_explain.snap @@ -0,0 +1,77 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q79" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer.c_last_name ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, substr(ms.s_city,Int64(1),Int64(30)) ASC NULLS LAST, ms.profit ASC NULLS LAST, fetch=100 | +| | Projection: customer.c_last_name, customer.c_first_name, substr(ms.s_city, Int64(1), Int64(30)), ms.ss_ticket_number, ms.amt, ms.profit | +| | Inner Join: ms.ss_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: ms | +| | Projection: store_sales.ss_ticket_number, store_sales.ss_customer_sk, store.s_city, sum(store_sales.ss_coupon_amt) AS amt, sum(store_sales.ss_net_profit) AS profit | +| | Aggregate: groupBy=[[store_sales.ss_ticket_number, store_sales.ss_customer_sk, store_sales.ss_addr_sk, store.s_city]], aggr=[[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)]] | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit, store.s_city | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit, store.s_city | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_hdemo_sk, store_sales.ss_addr_sk, store_sales.ss_store_sk, store_sales.ss_ticket_number, store_sales.ss_coupon_amt, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_dow = Int32(1), date_dim.d_year = Int32(1999) OR date_dim.d_year = Int32(2000) OR date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_city], full_filters=[store.s_number_employees >= Int32(200), store.s_number_employees <= Int32(295)] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(0) OR household_demographics.hd_vehicle_count > Int32(4)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| physical_plan | SortPreservingMergeExec: [c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, substr(ms.s_city,Int64(1),Int64(30))@2 ASC NULLS LAST, profit@5 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[c_last_name@0 ASC NULLS LAST, c_first_name@1 ASC NULLS LAST, substr(ms.s_city,Int64(1),Int64(30))@2 ASC NULLS LAST, profit@5 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_last_name@5 as c_last_name, c_first_name@4 as c_first_name, substr(s_city@1, 1, 30) as substr(ms.s_city,Int64(1),Int64(30)), ss_ticket_number@0 as ss_ticket_number, amt@2 as amt, profit@3 as profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@1, c_customer_sk@0)], projection=[ss_ticket_number@0, s_city@2, amt@3, profit@4, c_first_name@6, c_last_name@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, s_city@3 as s_city, sum(store_sales.ss_coupon_amt)@4 as amt, sum(store_sales.ss_net_profit)@5 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_ticket_number@0 as ss_ticket_number, ss_customer_sk@1 as ss_customer_sk, ss_addr_sk@2 as ss_addr_sk, s_city@3 as s_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_ticket_number@0, ss_customer_sk@1, ss_addr_sk@2, s_city@3], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_ticket_number@2 as ss_ticket_number, ss_customer_sk@0 as ss_customer_sk, ss_addr_sk@1 as ss_addr_sk, s_city@5 as s_city], aggr=[sum(store_sales.ss_coupon_amt), sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_customer_sk@0, ss_addr_sk@2, ss_ticket_number@3, ss_coupon_amt@4, ss_net_profit@5, s_city@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@3, s_store_sk@0)], projection=[ss_customer_sk@0, ss_hdemo_sk@1, ss_addr_sk@2, ss_ticket_number@4, ss_coupon_amt@5, ss_net_profit@6, s_city@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1, ss_hdemo_sk@2, ss_addr_sk@3, ss_store_sk@4, ss_ticket_number@5, ss_coupon_amt@6, ss_net_profit@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_ticket_number, ss_coupon_amt, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_dow@7 = 1 AND (d_year@6 = 1999 OR d_year@6 = 2000 OR d_year@6 = 2001), pruning_predicate=d_dow_null_count@2 != d_dow_row_count@3 AND d_dow_min@0 <= 1 AND 1 <= d_dow_max@1 AND (d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 1999 AND 1999 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5 OR d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2001 AND 2001 <= d_year_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_city], predicate=s_number_employees@6 >= 200 AND s_number_employees@6 <= 295, pruning_predicate=s_number_employees_null_count@1 != s_number_employees_row_count@2 AND s_number_employees_max@0 >= 200 AND s_number_employees_null_count@1 != s_number_employees_row_count@2 AND s_number_employees_min@3 <= 295, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 0 OR hd_vehicle_count@4 > 4, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 0 AND 0 <= hd_dep_count_max@1 OR hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_max@4 > 4, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_first_name, c_last_name] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q7_explain.snap new file mode 100644 index 0000000000..37405bddad --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q7_explain.snap @@ -0,0 +1,75 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q7" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, fetch=100 | +| | Projection: item.i_item_id, avg(store_sales.ss_quantity) AS agg1, avg(store_sales.ss_list_price) AS agg2, avg(store_sales.ss_coupon_amt) AS agg3, avg(store_sales.ss_sales_price) AS agg4 | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[avg(CAST(store_sales.ss_quantity AS Float64)), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)]] | +| | Projection: store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt, item.i_item_id | +| | Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Projection: store_sales.ss_promo_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt, item.i_item_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_promo_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_promo_sk, store_sales.ss_quantity, store_sales.ss_list_price, store_sales.ss_sales_price, store_sales.ss_coupon_amt | +| | Inner Join: store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_promo_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk], full_filters=[customer_demographics.cd_gender = LargeUtf8("M"), customer_demographics.cd_marital_status = LargeUtf8("M"), customer_demographics.cd_education_status = LargeUtf8("4 yr Degree")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_email = LargeUtf8("N") OR promotion.p_channel_event = LargeUtf8("N")] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, avg(store_sales.ss_quantity)@1 as agg1, avg(store_sales.ss_list_price)@2 as agg2, avg(store_sales.ss_coupon_amt)@3 as agg3, avg(store_sales.ss_sales_price)@4 as agg4] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@4 as i_item_id], aggr=[avg(store_sales.ss_quantity), avg(store_sales.ss_list_price), avg(store_sales.ss_coupon_amt), avg(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_promo_sk@0, p_promo_sk@0)], projection=[ss_quantity@1, ss_list_price@2, ss_sales_price@3, ss_coupon_amt@4, i_item_id@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_promo_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_promo_sk@1, ss_quantity@2, ss_list_price@3, ss_sales_price@4, ss_coupon_amt@5, i_item_id@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_promo_sk@2, ss_quantity@3, ss_list_price@4, ss_sales_price@5, ss_coupon_amt@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_cdemo_sk@2, cd_demo_sk@0)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_promo_sk@3, ss_quantity@4, ss_list_price@5, ss_sales_price@6, ss_coupon_amt@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_cdemo_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_cdemo_sk, ss_promo_sk, ss_quantity, ss_list_price, ss_sales_price, ss_coupon_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk], predicate=cd_gender@1 = M AND cd_marital_status@2 = M AND cd_education_status@3 = 4 yr Degree, pruning_predicate=cd_gender_null_count@2 != cd_gender_row_count@3 AND cd_gender_min@0 <= M AND M <= cd_gender_max@1 AND cd_marital_status_null_count@6 != cd_marital_status_row_count@7 AND cd_marital_status_min@4 <= M AND M <= cd_marital_status_max@5 AND cd_education_status_null_count@10 != cd_education_status_row_count@11 AND cd_education_status_min@8 <= 4 yr Degree AND 4 yr Degree <= cd_education_status_max@9, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk], predicate=p_channel_email@9 = N OR p_channel_event@14 = N, pruning_predicate=p_channel_email_null_count@2 != p_channel_email_row_count@3 AND p_channel_email_min@0 <= N AND N <= p_channel_email_max@1 OR p_channel_event_null_count@6 != p_channel_event_row_count@7 AND p_channel_event_min@4 <= N AND N <= p_channel_event_max@5, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q80_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q80_explain.snap new file mode 100644 index 0000000000..e49b57e0bc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q80_explain.snap @@ -0,0 +1,257 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q80" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: x.channel ASC NULLS LAST, x.id ASC NULLS LAST, fetch=100 | +| | Projection: x.channel, x.id, sum(x.sales) AS sales, sum(x.returns) AS returns, sum(x.profit) AS profit | +| | Aggregate: groupBy=[[ROLLUP (x.channel, x.id)]], aggr=[[sum(x.sales), sum(x.returns), sum(x.profit)]] | +| | SubqueryAlias: x | +| | Union | +| | Projection: Utf8("store channel") AS channel, LargeUtf8("store") || ssr.store_id AS id, ssr.sales, ssr.returns, ssr.profit | +| | SubqueryAlias: ssr | +| | Projection: store.s_store_id AS store_id, sum(store_sales.ss_ext_sales_price) AS sales, sum(coalesce(store_returns.sr_return_amt,Int64(0))) AS returns, sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0))) AS profit | +| | Aggregate: groupBy=[[store.s_store_id]], aggr=[[sum(store_sales.ss_ext_sales_price), sum(coalesce(CAST(store_returns.sr_return_amt AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(store_returns.sr_return_amt,Int64(0))), sum(store_sales.ss_net_profit - coalesce(CAST(store_returns.sr_net_loss AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))]] | +| | Projection: store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss, store.s_store_id | +| | Inner Join: store_sales.ss_promo_sk = promotion.p_promo_sk | +| | Projection: store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss, store.s_store_id | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss, store.s_store_id | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_item_sk, store_sales.ss_store_sk, store_sales.ss_promo_sk, store_sales.ss_ext_sales_price, store_sales.ss_net_profit, store_returns.sr_return_amt, store_returns.sr_net_loss | +| | Left Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_ext_sales_price, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_ticket_number, sr_return_amt, sr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2002-08-04"), date_dim.d_date <= Date32("2002-09-03")] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_id] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_current_price > Decimal128(Some(5000),7,2)] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_tv = LargeUtf8("N")] | +| | Projection: Utf8("catalog channel") AS channel, LargeUtf8("catalog_page") || csr.catalog_page_id AS id, csr.sales, csr.returns, csr.profit | +| | SubqueryAlias: csr | +| | Projection: catalog_page.cp_catalog_page_id AS catalog_page_id, sum(catalog_sales.cs_ext_sales_price) AS sales, sum(coalesce(catalog_returns.cr_return_amount,Int64(0))) AS returns, sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0))) AS profit | +| | Aggregate: groupBy=[[catalog_page.cp_catalog_page_id]], aggr=[[sum(catalog_sales.cs_ext_sales_price), sum(coalesce(CAST(catalog_returns.cr_return_amount AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(catalog_returns.cr_return_amount,Int64(0))), sum(catalog_sales.cs_net_profit - coalesce(CAST(catalog_returns.cr_net_loss AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))]] | +| | Projection: catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss, catalog_page.cp_catalog_page_id | +| | Inner Join: catalog_sales.cs_promo_sk = promotion.p_promo_sk | +| | Projection: catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss, catalog_page.cp_catalog_page_id | +| | Inner Join: catalog_sales.cs_item_sk = item.i_item_sk | +| | Projection: catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss, catalog_page.cp_catalog_page_id | +| | Inner Join: catalog_sales.cs_catalog_page_sk = catalog_page.cp_catalog_page_sk | +| | Projection: catalog_sales.cs_catalog_page_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_catalog_page_sk, catalog_sales.cs_item_sk, catalog_sales.cs_promo_sk, catalog_sales.cs_ext_sales_price, catalog_sales.cs_net_profit, catalog_returns.cr_return_amount, catalog_returns.cr_net_loss | +| | Left Join: catalog_sales.cs_item_sk = catalog_returns.cr_item_sk, catalog_sales.cs_order_number = catalog_returns.cr_order_number | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_catalog_page_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_ext_sales_price, cs_net_profit] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_item_sk, cr_order_number, cr_return_amount, cr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2002-08-04"), date_dim.d_date <= Date32("2002-09-03")] | +| | BytesProcessedNode | +| | TableScan: catalog_page projection=[cp_catalog_page_sk, cp_catalog_page_id] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_current_price > Decimal128(Some(5000),7,2)] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_tv = LargeUtf8("N")] | +| | Projection: Utf8("web channel") AS channel, LargeUtf8("web_site") || wsr.web_site_id AS id, wsr.sales, wsr.returns, wsr.profit | +| | SubqueryAlias: wsr | +| | Projection: web_site.web_site_id, sum(web_sales.ws_ext_sales_price) AS sales, sum(coalesce(web_returns.wr_return_amt,Int64(0))) AS returns, sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0))) AS profit | +| | Aggregate: groupBy=[[web_site.web_site_id]], aggr=[[sum(web_sales.ws_ext_sales_price), sum(coalesce(CAST(web_returns.wr_return_amt AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(coalesce(web_returns.wr_return_amt,Int64(0))), sum(web_sales.ws_net_profit - coalesce(CAST(web_returns.wr_net_loss AS Decimal128(22, 2)), Decimal128(Some(0),22,2))) AS sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))]] | +| | Projection: web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss, web_site.web_site_id | +| | Inner Join: web_sales.ws_promo_sk = promotion.p_promo_sk | +| | Projection: web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss, web_site.web_site_id | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss, web_site.web_site_id | +| | Inner Join: web_sales.ws_web_site_sk = web_site.web_site_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_web_site_sk, web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_item_sk, web_sales.ws_web_site_sk, web_sales.ws_promo_sk, web_sales.ws_ext_sales_price, web_sales.ws_net_profit, web_returns.wr_return_amt, web_returns.wr_net_loss | +| | Left Join: web_sales.ws_item_sk = web_returns.wr_item_sk, web_sales.ws_order_number = web_returns.wr_order_number | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_web_site_sk, ws_promo_sk, ws_order_number, ws_ext_sales_price, ws_net_profit] | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2002-08-04"), date_dim.d_date <= Date32("2002-09-03")] | +| | BytesProcessedNode | +| | TableScan: web_site projection=[web_site_sk, web_site_id] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_current_price > Decimal128(Some(5000),7,2)] | +| | BytesProcessedNode | +| | TableScan: promotion projection=[p_promo_sk], full_filters=[promotion.p_channel_tv = LargeUtf8("N")] | +| physical_plan | SortPreservingMergeExec: [channel@0 ASC NULLS LAST, id@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[channel@0 ASC NULLS LAST, id@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[channel@0 as channel, id@1 as id, sum(x.sales)@3 as sales, sum(x.returns)@4 as returns, sum(x.profit)@5 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[channel@0 as channel, id@1 as id, __grouping_id@2 as __grouping_id], aggr=[sum(x.sales), sum(x.returns), sum(x.profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([channel@0, id@1, __grouping_id@2], 24), input_partitions=72 | +| | AggregateExec: mode=Partial, gby=[(NULL as channel, NULL as id), (channel@0 as channel, NULL as id), (channel@0 as channel, id@1 as id)], aggr=[sum(x.sales), sum(x.returns), sum(x.profit)] | +| | UnionExec | +| | ProjectionExec: expr=[store channel as channel, store || store_id@0 as id, sales@1 as sales, returns@2 as returns, profit@3 as profit] | +| | ProjectionExec: expr=[s_store_id@0 as store_id, sum(store_sales.ss_ext_sales_price)@1 as sales, sum(coalesce(store_returns.sr_return_amt,Int64(0)))@2 as returns, sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))@3 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_store_id@0 as s_store_id], aggr=[sum(store_sales.ss_ext_sales_price), sum(coalesce(store_returns.sr_return_amt,Int64(0))), sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_store_id@4 as s_store_id], aggr=[sum(store_sales.ss_ext_sales_price), sum(coalesce(store_returns.sr_return_amt,Int64(0))), sum(store_sales.ss_net_profit - coalesce(store_returns.sr_net_loss,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_promo_sk@0, p_promo_sk@0)], projection=[ss_ext_sales_price@1, ss_net_profit@2, sr_return_amt@3, sr_net_loss@4, s_store_id@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_promo_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@0, i_item_sk@0)], projection=[ss_promo_sk@1, ss_ext_sales_price@2, ss_net_profit@3, sr_return_amt@4, sr_net_loss@5, s_store_id@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@1, s_store_sk@0)], projection=[ss_item_sk@0, ss_promo_sk@2, ss_ext_sales_price@3, ss_net_profit@4, sr_return_amt@5, sr_net_loss@6, s_store_id@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_store_sk@2, ss_promo_sk@3, ss_ext_sales_price@4, ss_net_profit@5, sr_return_amt@6, sr_net_loss@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_item_sk@1, sr_item_sk@0), (ss_ticket_number@4, sr_ticket_number@1)], projection=[ss_sold_date_sk@0, ss_item_sk@1, ss_store_sk@2, ss_promo_sk@3, ss_ext_sales_price@5, ss_net_profit@6, sr_return_amt@9, sr_net_loss@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1, ss_ticket_number@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_ext_sales_price, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_item_sk@0, sr_ticket_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_ticket_number, sr_return_amt, sr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2002-08-04 AND d_date@2 <= 2002-09-03, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2002-08-04 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2002-09-03, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_current_price@5 > Some(5000),7,2, pruning_predicate=i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_max@0 > Some(5000),7,2, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk], predicate=p_channel_tv@11 = N, pruning_predicate=p_channel_tv_null_count@2 != p_channel_tv_row_count@3 AND p_channel_tv_min@0 <= N AND N <= p_channel_tv_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[catalog channel as channel, catalog_page || catalog_page_id@0 as id, sales@1 as sales, returns@2 as returns, profit@3 as profit] | +| | ProjectionExec: expr=[cp_catalog_page_id@0 as catalog_page_id, sum(catalog_sales.cs_ext_sales_price)@1 as sales, sum(coalesce(catalog_returns.cr_return_amount,Int64(0)))@2 as returns, sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))@3 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[cp_catalog_page_id@0 as cp_catalog_page_id], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(coalesce(catalog_returns.cr_return_amount,Int64(0))), sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cp_catalog_page_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cp_catalog_page_id@4 as cp_catalog_page_id], aggr=[sum(catalog_sales.cs_ext_sales_price), sum(coalesce(catalog_returns.cr_return_amount,Int64(0))), sum(catalog_sales.cs_net_profit - coalesce(catalog_returns.cr_net_loss,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_promo_sk@0, p_promo_sk@0)], projection=[cs_ext_sales_price@1, cs_net_profit@2, cr_return_amount@3, cr_net_loss@4, cp_catalog_page_id@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_promo_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_item_sk@0, i_item_sk@0)], projection=[cs_promo_sk@1, cs_ext_sales_price@2, cs_net_profit@3, cr_return_amount@4, cr_net_loss@5, cp_catalog_page_id@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_catalog_page_sk@0, cp_catalog_page_sk@0)], projection=[cs_item_sk@1, cs_promo_sk@2, cs_ext_sales_price@3, cs_net_profit@4, cr_return_amount@5, cr_net_loss@6, cp_catalog_page_id@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_catalog_page_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_catalog_page_sk@1, cs_item_sk@2, cs_promo_sk@3, cs_ext_sales_price@4, cs_net_profit@5, cr_return_amount@6, cr_net_loss@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(cs_item_sk@2, cr_item_sk@0), (cs_order_number@4, cr_order_number@1)], projection=[cs_sold_date_sk@0, cs_catalog_page_sk@1, cs_item_sk@2, cs_promo_sk@3, cs_ext_sales_price@5, cs_net_profit@6, cr_return_amount@9, cr_net_loss@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_item_sk@2, cs_order_number@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_catalog_page_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_ext_sales_price, cs_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_item_sk@0, cr_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_item_sk, cr_order_number, cr_return_amount, cr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2002-08-04 AND d_date@2 <= 2002-09-03, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2002-08-04 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2002-09-03, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cp_catalog_page_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/catalog_page/catalog_page.parquet]]}, projection=[cp_catalog_page_sk, cp_catalog_page_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_current_price@5 > Some(5000),7,2, pruning_predicate=i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_max@0 > Some(5000),7,2, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk], predicate=p_channel_tv@11 = N, pruning_predicate=p_channel_tv_null_count@2 != p_channel_tv_row_count@3 AND p_channel_tv_min@0 <= N AND N <= p_channel_tv_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[web channel as channel, web_site || web_site_id@0 as id, sales@1 as sales, returns@2 as returns, profit@3 as profit] | +| | ProjectionExec: expr=[web_site_id@0 as web_site_id, sum(web_sales.ws_ext_sales_price)@1 as sales, sum(coalesce(web_returns.wr_return_amt,Int64(0)))@2 as returns, sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))@3 as profit] | +| | AggregateExec: mode=FinalPartitioned, gby=[web_site_id@0 as web_site_id], aggr=[sum(web_sales.ws_ext_sales_price), sum(coalesce(web_returns.wr_return_amt,Int64(0))), sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([web_site_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[web_site_id@4 as web_site_id], aggr=[sum(web_sales.ws_ext_sales_price), sum(coalesce(web_returns.wr_return_amt,Int64(0))), sum(web_sales.ws_net_profit - coalesce(web_returns.wr_net_loss,Int64(0)))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_promo_sk@0, p_promo_sk@0)], projection=[ws_ext_sales_price@1, ws_net_profit@2, wr_return_amt@3, wr_net_loss@4, web_site_id@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_promo_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_promo_sk@1, ws_ext_sales_price@2, ws_net_profit@3, wr_return_amt@4, wr_net_loss@5, web_site_id@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_site_sk@1, web_site_sk@0)], projection=[ws_item_sk@0, ws_promo_sk@2, ws_ext_sales_price@3, ws_net_profit@4, wr_return_amt@5, wr_net_loss@6, web_site_id@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_site_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_web_site_sk@2, ws_promo_sk@3, ws_ext_sales_price@4, ws_net_profit@5, wr_return_amt@6, wr_net_loss@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ws_item_sk@1, wr_item_sk@0), (ws_order_number@4, wr_order_number@1)], projection=[ws_sold_date_sk@0, ws_item_sk@1, ws_web_site_sk@2, ws_promo_sk@3, ws_ext_sales_price@5, ws_net_profit@6, wr_return_amt@9, wr_net_loss@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1, ws_order_number@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_web_site_sk, ws_promo_sk, ws_order_number, ws_ext_sales_price, ws_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_item_sk@0, wr_order_number@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_item_sk, wr_order_number, wr_return_amt, wr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2002-08-04 AND d_date@2 <= 2002-09-03, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2002-08-04 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2002-09-03, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([web_site_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_site/web_site.parquet]]}, projection=[web_site_sk, web_site_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_current_price@5 > Some(5000),7,2, pruning_predicate=i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_max@0 > Some(5000),7,2, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([p_promo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/promotion/promotion.parquet]]}, projection=[p_promo_sk], predicate=p_channel_tv@11 = N, pruning_predicate=p_channel_tv_null_count@2 != p_channel_tv_row_count@3 AND p_channel_tv_min@0 <= N AND N <= p_channel_tv_max@1, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q81_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q81_explain.snap new file mode 100644 index 0000000000..3f332a04d0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q81_explain.snap @@ -0,0 +1,132 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q81" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: customer.c_customer_id ASC NULLS LAST, customer.c_salutation ASC NULLS LAST, customer.c_first_name ASC NULLS LAST, customer.c_last_name ASC NULLS LAST, customer_address.ca_street_number ASC NULLS LAST, customer_address.ca_street_name ASC NULLS LAST, customer_address.ca_street_type ASC NULLS LAST, customer_address.ca_suite_number ASC NULLS LAST, customer_address.ca_city ASC NULLS LAST, customer_address.ca_county ASC NULLS LAST, customer_address.ca_state ASC NULLS LAST, customer_address.ca_zip ASC NULLS LAST, customer_address.ca_country ASC NULLS LAST, customer_address.ca_gmt_offset ASC NULLS LAST, customer_address.ca_location_type ASC NULLS LAST, ctr1.ctr_total_return ASC NULLS LAST, fetch=100 | +| | Projection: customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name, customer_address.ca_street_number, customer_address.ca_street_name, customer_address.ca_street_type, customer_address.ca_suite_number, customer_address.ca_city, customer_address.ca_county, customer_address.ca_state, customer_address.ca_zip, customer_address.ca_country, customer_address.ca_gmt_offset, customer_address.ca_location_type, ctr1.ctr_total_return | +| | Inner Join: ctr1.ctr_state = __scalar_sq_1.ctr_state Filter: CAST(ctr1.ctr_total_return AS Decimal128(30, 15)) > __scalar_sq_1.avg(ctr2.ctr_total_return) * Float64(1.2) | +| | Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer_address.ca_street_number, customer_address.ca_street_name, customer_address.ca_street_type, customer_address.ca_suite_number, customer_address.ca_city, customer_address.ca_county, customer_address.ca_state, customer_address.ca_zip, customer_address.ca_country, customer_address.ca_gmt_offset, customer_address.ca_location_type, customer.c_customer_id, customer.c_salutation, customer.c_first_name, customer.c_last_name | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: ctr1.ctr_state, ctr1.ctr_total_return, customer.c_customer_id, customer.c_current_addr_sk, customer.c_salutation, customer.c_first_name, customer.c_last_name | +| | Inner Join: ctr1.ctr_customer_sk = customer.c_customer_sk | +| | SubqueryAlias: ctr1 | +| | SubqueryAlias: customer_total_return | +| | Projection: catalog_returns.cr_returning_customer_sk AS ctr_customer_sk, customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[catalog_returns.cr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(catalog_returns.cr_return_amt_inc_tax)]] | +| | Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_return_amt_inc_tax, customer_address.ca_state | +| | Inner Join: catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk | +| | Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_returning_addr_sk, catalog_returns.cr_return_amt_inc_tax | +| | Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1998)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_street_number, ca_street_name, ca_street_type, ca_suite_number, ca_city, ca_county, ca_state, ca_zip, ca_country, ca_gmt_offset, ca_location_type], full_filters=[customer_address.ca_state = LargeUtf8("TX")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(CAST(avg(ctr2.ctr_total_return) AS Float64) * Float64(1.2) AS Decimal128(30, 15)), ctr2.ctr_state | +| | Aggregate: groupBy=[[ctr2.ctr_state]], aggr=[[avg(ctr2.ctr_total_return)]] | +| | SubqueryAlias: ctr2 | +| | SubqueryAlias: customer_total_return | +| | Projection: customer_address.ca_state AS ctr_state, sum(catalog_returns.cr_return_amt_inc_tax) AS ctr_total_return | +| | Aggregate: groupBy=[[catalog_returns.cr_returning_customer_sk, customer_address.ca_state]], aggr=[[sum(catalog_returns.cr_return_amt_inc_tax)]] | +| | Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_return_amt_inc_tax, customer_address.ca_state | +| | Inner Join: catalog_returns.cr_returning_addr_sk = customer_address.ca_address_sk | +| | Projection: catalog_returns.cr_returning_customer_sk, catalog_returns.cr_returning_addr_sk, catalog_returns.cr_return_amt_inc_tax | +| | Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(1998)] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state] | +| physical_plan | SortPreservingMergeExec: [c_customer_id@0 ASC NULLS LAST, c_salutation@1 ASC NULLS LAST, c_first_name@2 ASC NULLS LAST, c_last_name@3 ASC NULLS LAST, ca_street_number@4 ASC NULLS LAST, ca_street_name@5 ASC NULLS LAST, ca_street_type@6 ASC NULLS LAST, ca_suite_number@7 ASC NULLS LAST, ca_city@8 ASC NULLS LAST, ca_county@9 ASC NULLS LAST, ca_state@10 ASC NULLS LAST, ca_zip@11 ASC NULLS LAST, ca_country@12 ASC NULLS LAST, ca_gmt_offset@13 ASC NULLS LAST, ca_location_type@14 ASC NULLS LAST, ctr_total_return@15 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[c_customer_id@0 ASC NULLS LAST, c_salutation@1 ASC NULLS LAST, c_first_name@2 ASC NULLS LAST, c_last_name@3 ASC NULLS LAST, ca_street_number@4 ASC NULLS LAST, ca_street_name@5 ASC NULLS LAST, ca_street_type@6 ASC NULLS LAST, ca_suite_number@7 ASC NULLS LAST, ca_city@8 ASC NULLS LAST, ca_county@9 ASC NULLS LAST, ca_state@10 ASC NULLS LAST, ca_zip@11 ASC NULLS LAST, ca_country@12 ASC NULLS LAST, ca_gmt_offset@13 ASC NULLS LAST, ca_location_type@14 ASC NULLS LAST, ctr_total_return@15 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_customer_id@12 as c_customer_id, c_salutation@13 as c_salutation, c_first_name@14 as c_first_name, c_last_name@15 as c_last_name, ca_street_number@1 as ca_street_number, ca_street_name@2 as ca_street_name, ca_street_type@3 as ca_street_type, ca_suite_number@4 as ca_suite_number, ca_city@5 as ca_city, ca_county@6 as ca_county, ca_state@7 as ca_state, ca_zip@8 as ca_zip, ca_country@9 as ca_country, ca_gmt_offset@10 as ca_gmt_offset, ca_location_type@11 as ca_location_type, ctr_total_return@0 as ctr_total_return] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ctr_state@0, ctr_state@1)], filter=CAST(ctr_total_return@0 AS Decimal128(30, 15)) > avg(ctr2.ctr_total_return) * Float64(1.2)@1, projection=[ctr_total_return@1, ca_street_number@2, ca_street_name@3, ca_street_type@4, ca_suite_number@5, ca_city@6, ca_county@7, ca_state@8, ca_zip@9, ca_country@10, ca_gmt_offset@11, ca_location_type@12, c_customer_id@13, c_salutation@14, c_first_name@15, c_last_name@16] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_state@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[ctr_state@0 as ctr_state, ctr_total_return@1 as ctr_total_return, ca_street_number@6 as ca_street_number, ca_street_name@7 as ca_street_name, ca_street_type@8 as ca_street_type, ca_suite_number@9 as ca_suite_number, ca_city@10 as ca_city, ca_county@11 as ca_county, ca_state@12 as ca_state, ca_zip@13 as ca_zip, ca_country@14 as ca_country, ca_gmt_offset@15 as ca_gmt_offset, ca_location_type@16 as ca_location_type, c_customer_id@2 as c_customer_id, c_salutation@3 as c_salutation, c_first_name@4 as c_first_name, c_last_name@5 as c_last_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@3, ca_address_sk@0)], projection=[ctr_state@0, ctr_total_return@1, c_customer_id@2, c_salutation@4, c_first_name@5, c_last_name@6, ca_street_number@8, ca_street_name@9, ca_street_type@10, ca_suite_number@11, ca_city@12, ca_county@13, ca_state@14, ca_zip@15, ca_country@16, ca_gmt_offset@17, ca_location_type@18] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ctr_customer_sk@0, c_customer_sk@0)], projection=[ctr_state@1, ctr_total_return@2, c_customer_id@4, c_current_addr_sk@5, c_salutation@6, c_first_name@7, c_last_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_customer_sk@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[cr_returning_customer_sk@0 as ctr_customer_sk, ca_state@1 as ctr_state, sum(catalog_returns.cr_return_amt_inc_tax)@2 as ctr_total_return] | +| | AggregateExec: mode=FinalPartitioned, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returning_customer_sk@0, ca_state@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returning_addr_sk@1, ca_address_sk@0)], projection=[cr_returning_customer_sk@0, cr_return_amt_inc_tax@2, ca_state@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returning_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returned_date_sk@0, d_date_sk@0)], projection=[cr_returning_customer_sk@1, cr_returning_addr_sk@2, cr_return_amt_inc_tax@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returned_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1998, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_customer_id, c_current_addr_sk, c_salutation, c_first_name, c_last_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_street_number, ca_street_name, ca_street_type, ca_suite_number, ca_city, ca_county, ca_state, ca_zip, ca_country, ca_gmt_offset, ca_location_type], predicate=ca_state@8 = TX, pruning_predicate=ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= TX AND TX <= ca_state_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(CAST(avg(ctr2.ctr_total_return)@1 AS Float64) * 1.2 AS Decimal128(30, 15)) as avg(ctr2.ctr_total_return) * Float64(1.2), ctr_state@0 as ctr_state] | +| | AggregateExec: mode=FinalPartitioned, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ctr_state@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ctr_state@0 as ctr_state], aggr=[avg(ctr2.ctr_total_return)] | +| | ProjectionExec: expr=[ca_state@1 as ctr_state, sum(catalog_returns.cr_return_amt_inc_tax)@2 as ctr_total_return] | +| | AggregateExec: mode=FinalPartitioned, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@1 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returning_customer_sk@0, ca_state@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cr_returning_customer_sk@0 as cr_returning_customer_sk, ca_state@2 as ca_state], aggr=[sum(catalog_returns.cr_return_amt_inc_tax)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returning_addr_sk@1, ca_address_sk@0)], projection=[cr_returning_customer_sk@0, cr_return_amt_inc_tax@2, ca_state@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returning_addr_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returned_date_sk@0, d_date_sk@0)], projection=[cr_returning_customer_sk@1, cr_returning_addr_sk@2, cr_return_amt_inc_tax@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returned_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_returning_addr_sk, cr_return_amt_inc_tax] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 1998, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 1998 AND 1998 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q82_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q82_explain.snap new file mode 100644 index 0000000000..0ff5f1f98a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q82_explain.snap @@ -0,0 +1,59 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q82" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_item_id ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_current_price]], aggr=[[]] | +| | Projection: item.i_item_id, item.i_item_desc, item.i_current_price | +| | Inner Join: item.i_item_sk = store_sales.ss_item_sk | +| | Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price | +| | Inner Join: inventory.inv_date_sk = date_dim.d_date_sk | +| | Projection: item.i_item_sk, item.i_item_id, item.i_item_desc, item.i_current_price, inventory.inv_date_sk | +| | Inner Join: item.i_item_sk = inventory.inv_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], full_filters=[item.i_current_price >= Decimal128(Some(6900),7,2), item.i_current_price <= Decimal128(Some(9900),7,2), item.i_manufact_id IN ([Int32(105), Int32(513), Int32(180), Int32(137)])] | +| | BytesProcessedNode | +| | TableScan: inventory projection=[inv_date_sk, inv_item_sk], full_filters=[inventory.inv_quantity_on_hand >= Int32(100), inventory.inv_quantity_on_hand <= Int32(500)] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("1998-06-06"), date_dim.d_date <= Date32("1998-08-05")] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_item_sk] | +| physical_plan | SortPreservingMergeExec: [i_item_id@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[i_item_id@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_current_price@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_current_price@2 as i_current_price], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@0)], projection=[i_item_id@1, i_item_desc@2, i_current_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(inv_date_sk@4, d_date_sk@0)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_date_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, inv_item_sk@1)], projection=[i_item_sk@0, i_item_id@1, i_item_desc@2, i_current_price@3, inv_date_sk@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price], predicate=i_current_price@5 >= Some(6900),7,2 AND i_current_price@5 <= Some(9900),7,2 AND Use i_manufact_id@13 IN (SET) ([Literal { value: Int32(105) }, Literal { value: Int32(513) }, Literal { value: Int32(180) }, Literal { value: Int32(137) }]), pruning_predicate=i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_max@0 >= Some(6900),7,2 AND i_current_price_null_count@1 != i_current_price_row_count@2 AND i_current_price_min@3 <= Some(9900),7,2 AND (i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 105 AND 105 <= i_manufact_id_max@5 OR i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 513 AND 513 <= i_manufact_id_max@5 OR i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 180 AND 180 <= i_manufact_id_max@5 OR i_manufact_id_null_count@6 != i_manufact_id_row_count@7 AND i_manufact_id_min@4 <= 137 AND 137 <= i_manufact_id_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([inv_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/inventory/inventory.parquet:0..2678460], [tpcds_sf1/inventory/inventory.parquet:2678460..5356920], [tpcds_sf1/inventory/inventory.parquet:5356920..8035380], [tpcds_sf1/inventory/inventory.parquet:8035380..10713840], [tpcds_sf1/inventory/inventory.parquet:10713840..13392300], ...]}, projection=[inv_date_sk, inv_item_sk], predicate=inv_quantity_on_hand@3 >= 100 AND inv_quantity_on_hand@3 <= 500, pruning_predicate=inv_quantity_on_hand_null_count@1 != inv_quantity_on_hand_row_count@2 AND inv_quantity_on_hand_max@0 >= 100 AND inv_quantity_on_hand_null_count@1 != inv_quantity_on_hand_row_count@2 AND inv_quantity_on_hand_min@3 <= 500, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 1998-06-06 AND d_date@2 <= 1998-08-05, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 1998-06-06 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 1998-08-05, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_item_sk] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q83_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q83_explain.snap new file mode 100644 index 0000000000..5f3d92a6f3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q83_explain.snap @@ -0,0 +1,222 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q83" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: sr_items.item_id ASC NULLS LAST, sr_items.sr_item_qty ASC NULLS LAST, fetch=100 | +| | Projection: sr_items.item_id, sr_items.sr_item_qty, CAST(sr_items.sr_item_qty / __common_expr_7 AS Float64) / Float64(3) * Float64(100) AS sr_dev, cr_items.cr_item_qty, CAST(cr_items.cr_item_qty / __common_expr_7 AS Float64) / Float64(3) * Float64(100) AS cr_dev, wr_items.wr_item_qty, CAST(wr_items.wr_item_qty / __common_expr_7 AS Float64) / Float64(3) * Float64(100) AS wr_dev, CAST(__common_expr_7 AS Float64) / Float64(3) AS average | +| | Projection: sr_items.sr_item_qty + cr_items.cr_item_qty + wr_items.wr_item_qty AS __common_expr_7, sr_items.item_id, sr_items.sr_item_qty, cr_items.cr_item_qty, wr_items.wr_item_qty | +| | Inner Join: sr_items.item_id = wr_items.item_id | +| | Projection: sr_items.item_id, sr_items.sr_item_qty, cr_items.cr_item_qty | +| | Inner Join: sr_items.item_id = cr_items.item_id | +| | SubqueryAlias: sr_items | +| | Projection: item.i_item_id AS item_id, sum(store_returns.sr_return_quantity) AS sr_item_qty | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(CAST(store_returns.sr_return_quantity AS Int64))]] | +| | Projection: store_returns.sr_return_quantity, item.i_item_id | +| | LeftSemi Join: date_dim.d_date = __correlated_sq_2.d_date | +| | Projection: store_returns.sr_return_quantity, item.i_item_id, date_dim.d_date | +| | Inner Join: store_returns.sr_returned_date_sk = date_dim.d_date_sk | +| | Projection: store_returns.sr_returned_date_sk, store_returns.sr_return_quantity, item.i_item_id | +| | Inner Join: store_returns.sr_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_returned_date_sk, sr_item_sk, sr_return_quantity] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: date_dim.d_date | +| | LeftSemi Join: date_dim.d_week_seq = __correlated_sq_1.d_week_seq | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date, d_week_seq] | +| | SubqueryAlias: __correlated_sq_1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_date = Date32("2000-04-29") OR date_dim.d_date = Date32("2000-09-09") OR date_dim.d_date = Date32("2000-11-02")] | +| | SubqueryAlias: cr_items | +| | Projection: item.i_item_id AS item_id, sum(catalog_returns.cr_return_quantity) AS cr_item_qty | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(CAST(catalog_returns.cr_return_quantity AS Int64))]] | +| | Projection: catalog_returns.cr_return_quantity, item.i_item_id | +| | LeftSemi Join: date_dim.d_date = __correlated_sq_4.d_date | +| | Projection: catalog_returns.cr_return_quantity, item.i_item_id, date_dim.d_date | +| | Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | Projection: catalog_returns.cr_returned_date_sk, catalog_returns.cr_return_quantity, item.i_item_id | +| | Inner Join: catalog_returns.cr_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_item_sk, cr_return_quantity] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: __correlated_sq_4 | +| | Projection: date_dim.d_date | +| | LeftSemi Join: date_dim.d_week_seq = __correlated_sq_3.d_week_seq | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date, d_week_seq] | +| | SubqueryAlias: __correlated_sq_3 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_date = Date32("2000-04-29") OR date_dim.d_date = Date32("2000-09-09") OR date_dim.d_date = Date32("2000-11-02")] | +| | SubqueryAlias: wr_items | +| | Projection: item.i_item_id AS item_id, sum(web_returns.wr_return_quantity) AS wr_item_qty | +| | Aggregate: groupBy=[[item.i_item_id]], aggr=[[sum(CAST(web_returns.wr_return_quantity AS Int64))]] | +| | Projection: web_returns.wr_return_quantity, item.i_item_id | +| | LeftSemi Join: date_dim.d_date = __correlated_sq_6.d_date | +| | Projection: web_returns.wr_return_quantity, item.i_item_id, date_dim.d_date | +| | Inner Join: web_returns.wr_returned_date_sk = date_dim.d_date_sk | +| | Projection: web_returns.wr_returned_date_sk, web_returns.wr_return_quantity, item.i_item_id | +| | Inner Join: web_returns.wr_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_returned_date_sk, wr_item_sk, wr_return_quantity] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date] | +| | SubqueryAlias: __correlated_sq_6 | +| | Projection: date_dim.d_date | +| | LeftSemi Join: date_dim.d_week_seq = __correlated_sq_5.d_week_seq | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date, d_week_seq] | +| | SubqueryAlias: __correlated_sq_5 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_week_seq], full_filters=[date_dim.d_date = Date32("2000-04-29") OR date_dim.d_date = Date32("2000-09-09") OR date_dim.d_date = Date32("2000-11-02")] | +| physical_plan | SortPreservingMergeExec: [item_id@0 ASC NULLS LAST, sr_item_qty@1 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[item_id@0 ASC NULLS LAST, sr_item_qty@1 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[item_id@1 as item_id, sr_item_qty@2 as sr_item_qty, CAST(sr_item_qty@2 / __common_expr_7@0 AS Float64) / 3 * 100 as sr_dev, cr_item_qty@3 as cr_item_qty, CAST(cr_item_qty@3 / __common_expr_7@0 AS Float64) / 3 * 100 as cr_dev, wr_item_qty@4 as wr_item_qty, CAST(wr_item_qty@4 / __common_expr_7@0 AS Float64) / 3 * 100 as wr_dev, CAST(__common_expr_7@0 AS Float64) / 3 as average] | +| | ProjectionExec: expr=[sr_item_qty@1 + cr_item_qty@2 + wr_item_qty@3 as __common_expr_7, item_id@0 as item_id, sr_item_qty@1 as sr_item_qty, cr_item_qty@2 as cr_item_qty, wr_item_qty@3 as wr_item_qty] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_id@0, item_id@0)], projection=[item_id@0, sr_item_qty@1, cr_item_qty@2, wr_item_qty@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(item_id@0, item_id@0)], projection=[item_id@0, sr_item_qty@1, cr_item_qty@3] | +| | ProjectionExec: expr=[i_item_id@0 as item_id, sum(store_returns.sr_return_quantity)@1 as sr_item_qty] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(store_returns.sr_return_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(store_returns.sr_return_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[sr_return_quantity@0, i_item_id@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_returned_date_sk@0, d_date_sk@0)], projection=[sr_return_quantity@1, i_item_id@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_returned_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_item_sk@1, i_item_sk@0)], projection=[sr_returned_date_sk@0, sr_return_quantity@2, i_item_id@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_returned_date_sk, sr_item_sk, sr_return_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_week_seq@1, d_week_seq@0)], projection=[d_date@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date, d_week_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_date@2 = 2000-04-29 OR d_date@2 = 2000-09-09 OR d_date@2 = 2000-11-02, pruning_predicate=d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-04-29 AND 2000-04-29 <= d_date_max@1 OR d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-09-09 AND 2000-09-09 <= d_date_max@1 OR d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-11-02 AND 2000-11-02 <= d_date_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as item_id, sum(catalog_returns.cr_return_quantity)@1 as cr_item_qty] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(catalog_returns.cr_return_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(catalog_returns.cr_return_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[cr_return_quantity@0, i_item_id@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returned_date_sk@0, d_date_sk@0)], projection=[cr_return_quantity@1, i_item_id@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returned_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_item_sk@1, i_item_sk@0)], projection=[cr_returned_date_sk@0, cr_return_quantity@2, i_item_id@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_returned_date_sk, cr_item_sk, cr_return_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_week_seq@1, d_week_seq@0)], projection=[d_date@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date, d_week_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_date@2 = 2000-04-29 OR d_date@2 = 2000-09-09 OR d_date@2 = 2000-11-02, pruning_predicate=d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-04-29 AND 2000-04-29 <= d_date_max@1 OR d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-09-09 AND 2000-09-09 <= d_date_max@1 OR d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-11-02 AND 2000-11-02 <= d_date_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[i_item_id@0 as item_id, sum(web_returns.wr_return_quantity)@1 as wr_item_qty] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id], aggr=[sum(web_returns.wr_return_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id], aggr=[sum(web_returns.wr_return_quantity)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_date@2, d_date@0)], projection=[wr_return_quantity@0, i_item_id@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_returned_date_sk@0, d_date_sk@0)], projection=[wr_return_quantity@1, i_item_id@2, d_date@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returned_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_item_sk@1, i_item_sk@0)], projection=[wr_returned_date_sk@0, wr_return_quantity@2, i_item_id@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_item_sk@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_returned_date_sk, wr_item_sk, wr_return_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(d_week_seq@1, d_week_seq@0)], projection=[d_date@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@1], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date, d_week_seq] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_week_seq@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_week_seq], predicate=d_date@2 = 2000-04-29 OR d_date@2 = 2000-09-09 OR d_date@2 = 2000-11-02, pruning_predicate=d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-04-29 AND 2000-04-29 <= d_date_max@1 OR d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-09-09 AND 2000-09-09 <= d_date_max@1 OR d_date_null_count@2 != d_date_row_count@3 AND d_date_min@0 <= 2000-11-02 AND 2000-11-02 <= d_date_max@1, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q84_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q84_explain.snap new file mode 100644 index 0000000000..bfa633623f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q84_explain.snap @@ -0,0 +1,84 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q84" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: customer_id, customername | +| | Sort: customer.c_customer_id ASC NULLS LAST, fetch=100 | +| | Projection: customer.c_customer_id AS customer_id, coalesce(customer.c_last_name, LargeUtf8("")) || LargeUtf8(", ") || coalesce(customer.c_first_name, LargeUtf8("")) AS customername, customer.c_customer_id | +| | Inner Join: customer_demographics.cd_demo_sk = store_returns.sr_cdemo_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer_demographics.cd_demo_sk | +| | Inner Join: household_demographics.hd_income_band_sk = income_band.ib_income_band_sk | +| | Projection: customer.c_customer_id, customer.c_first_name, customer.c_last_name, customer_demographics.cd_demo_sk, household_demographics.hd_income_band_sk | +| | Inner Join: customer.c_current_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: customer.c_customer_id, customer.c_current_hdemo_sk, customer.c_first_name, customer.c_last_name, customer_demographics.cd_demo_sk | +| | Inner Join: customer.c_current_cdemo_sk = customer_demographics.cd_demo_sk | +| | Projection: customer.c_customer_id, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_first_name, customer.c_last_name | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_id, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_city = LargeUtf8("White Oak")] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk, hd_income_band_sk] | +| | BytesProcessedNode | +| | TableScan: income_band projection=[ib_income_band_sk], full_filters=[income_band.ib_lower_bound >= Int32(45626), income_band.ib_upper_bound <= Int32(95626)] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_cdemo_sk] | +| physical_plan | ProjectionExec: expr=[customer_id@0 as customer_id, customername@1 as customername] | +| | SortPreservingMergeExec: [c_customer_id@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[c_customer_id@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[c_customer_id@0 as customer_id, coalesce(c_last_name@2, ) || , || coalesce(c_first_name@1, ) as customername, c_customer_id@0 as c_customer_id] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cd_demo_sk@3, sr_cdemo_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(hd_income_band_sk@4, ib_income_band_sk@0)], projection=[c_customer_id@0, c_first_name@1, c_last_name@2, cd_demo_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_income_band_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_hdemo_sk@1, hd_demo_sk@0)], projection=[c_customer_id@0, c_first_name@2, c_last_name@3, cd_demo_sk@4, hd_income_band_sk@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_hdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@1, cd_demo_sk@0)], projection=[c_customer_id@0, c_current_hdemo_sk@2, c_first_name@3, c_last_name@4, cd_demo_sk@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@3, ca_address_sk@0)], projection=[c_customer_id@0, c_current_cdemo_sk@1, c_current_hdemo_sk@2, c_first_name@4, c_last_name@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@3], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_id, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk, c_first_name, c_last_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_city@6 = White Oak, pruning_predicate=ca_city_null_count@2 != ca_city_row_count@3 AND ca_city_min@0 <= White Oak AND White Oak <= ca_city_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk, hd_income_band_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ib_income_band_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/income_band/income_band.parquet]]}, projection=[ib_income_band_sk], predicate=ib_lower_bound@1 >= 45626 AND ib_upper_bound@2 <= 95626, pruning_predicate=ib_lower_bound_null_count@1 != ib_lower_bound_row_count@2 AND ib_lower_bound_max@0 >= 45626 AND ib_upper_bound_null_count@4 != ib_upper_bound_row_count@5 AND ib_upper_bound_min@3 <= 95626, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_cdemo_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_cdemo_sk] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q85_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q85_explain.snap new file mode 100644 index 0000000000..6e9d97713d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q85_explain.snap @@ -0,0 +1,116 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q85" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: substr(reason.r_reason_desc,Int64(1),Int64(20)) ASC NULLS LAST, avg(web_sales.ws_quantity) ASC NULLS LAST, avg(web_returns.wr_refunded_cash) ASC NULLS LAST, avg(web_returns.wr_fee) ASC NULLS LAST, fetch=100 | +| | Projection: substr(reason.r_reason_desc, Int64(1), Int64(20)), avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee) | +| | Aggregate: groupBy=[[reason.r_reason_desc]], aggr=[[avg(CAST(web_sales.ws_quantity AS Float64)), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)]] | +| | Projection: web_sales.ws_quantity, web_returns.wr_fee, web_returns.wr_refunded_cash, reason.r_reason_desc | +| | Inner Join: web_returns.wr_reason_sk = reason.r_reason_sk | +| | Projection: web_sales.ws_quantity, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash | +| | Inner Join: web_returns.wr_refunded_addr_sk = customer_address.ca_address_sk Filter: (customer_address.ca_state = LargeUtf8("SC") OR customer_address.ca_state = LargeUtf8("IN") OR customer_address.ca_state = LargeUtf8("VA")) AND web_sales.ws_net_profit >= Decimal128(Some(10000),7,2) AND web_sales.ws_net_profit <= Decimal128(Some(20000),7,2) OR (customer_address.ca_state = LargeUtf8("WA") OR customer_address.ca_state = LargeUtf8("KS") OR customer_address.ca_state = LargeUtf8("KY")) AND web_sales.ws_net_profit >= Decimal128(Some(15000),7,2) AND web_sales.ws_net_profit <= Decimal128(Some(30000),7,2) OR (customer_address.ca_state = LargeUtf8("SD") OR customer_address.ca_state = LargeUtf8("WI") OR customer_address.ca_state = LargeUtf8("NE")) AND web_sales.ws_net_profit >= Decimal128(Some(5000),7,2) AND web_sales.ws_net_profit <= Decimal128(Some(25000),7,2) | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_sales.ws_net_profit, web_returns.wr_refunded_addr_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash | +| | Inner Join: web_returns.wr_returning_cdemo_sk = cd2.cd_demo_sk, cd1.cd_marital_status = cd2.cd_marital_status, cd1.cd_education_status = cd2.cd_education_status | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_sales.ws_net_profit, web_returns.wr_refunded_addr_sk, web_returns.wr_returning_cdemo_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash, cd1.cd_marital_status, cd1.cd_education_status | +| | Inner Join: web_returns.wr_refunded_cdemo_sk = cd1.cd_demo_sk Filter: cd1.cd_marital_status = LargeUtf8("D") AND cd1.cd_education_status = LargeUtf8("Primary") AND web_sales.ws_sales_price >= Decimal128(Some(10000),7,2) AND web_sales.ws_sales_price <= Decimal128(Some(15000),7,2) OR cd1.cd_marital_status = LargeUtf8("U") AND cd1.cd_education_status = LargeUtf8("Unknown") AND web_sales.ws_sales_price >= Decimal128(Some(5000),7,2) AND web_sales.ws_sales_price <= Decimal128(Some(10000),7,2) OR cd1.cd_marital_status = LargeUtf8("M") AND cd1.cd_education_status = LargeUtf8("Advanced Degree") AND web_sales.ws_sales_price >= Decimal128(Some(15000),7,2) AND web_sales.ws_sales_price <= Decimal128(Some(20000),7,2) | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_quantity, web_sales.ws_sales_price, web_sales.ws_net_profit, web_returns.wr_refunded_cdemo_sk, web_returns.wr_refunded_addr_sk, web_returns.wr_returning_cdemo_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash | +| | Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_web_page_sk, web_sales.ws_quantity, web_sales.ws_sales_price, web_sales.ws_net_profit, web_returns.wr_refunded_cdemo_sk, web_returns.wr_refunded_addr_sk, web_returns.wr_returning_cdemo_sk, web_returns.wr_reason_sk, web_returns.wr_fee, web_returns.wr_refunded_cash | +| | Inner Join: web_sales.ws_item_sk = web_returns.wr_item_sk, web_sales.ws_order_number = web_returns.wr_order_number | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_web_page_sk, ws_order_number, ws_quantity, ws_sales_price, ws_net_profit], full_filters=[web_sales.ws_net_profit >= Decimal128(Some(10000),7,2) AND web_sales.ws_net_profit <= Decimal128(Some(20000),7,2) OR web_sales.ws_net_profit >= Decimal128(Some(15000),7,2) AND web_sales.ws_net_profit <= Decimal128(Some(30000),7,2) OR web_sales.ws_net_profit >= Decimal128(Some(5000),7,2) AND web_sales.ws_net_profit <= Decimal128(Some(25000),7,2), web_sales.ws_sales_price >= Decimal128(Some(10000),7,2) AND web_sales.ws_sales_price <= Decimal128(Some(15000),7,2) OR web_sales.ws_sales_price >= Decimal128(Some(5000),7,2) AND web_sales.ws_sales_price <= Decimal128(Some(10000),7,2) OR web_sales.ws_sales_price >= Decimal128(Some(15000),7,2) AND web_sales.ws_sales_price <= Decimal128(Some(20000),7,2)] | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_item_sk, wr_refunded_cdemo_sk, wr_refunded_addr_sk, wr_returning_cdemo_sk, wr_reason_sk, wr_order_number, wr_fee, wr_refunded_cash] | +| | BytesProcessedNode | +| | TableScan: web_page projection=[wp_web_page_sk] | +| | SubqueryAlias: cd1 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], full_filters=[customer_demographics.cd_marital_status = LargeUtf8("D") AND customer_demographics.cd_education_status = LargeUtf8("Primary") OR customer_demographics.cd_marital_status = LargeUtf8("U") AND customer_demographics.cd_education_status = LargeUtf8("Unknown") OR customer_demographics.cd_marital_status = LargeUtf8("M") AND customer_demographics.cd_education_status = LargeUtf8("Advanced Degree")] | +| | SubqueryAlias: cd2 | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_state], full_filters=[customer_address.ca_country = LargeUtf8("United States"), customer_address.ca_state IN ([LargeUtf8("SC"), LargeUtf8("IN"), LargeUtf8("VA"), LargeUtf8("WA"), LargeUtf8("KS"), LargeUtf8("KY"), LargeUtf8("SD"), LargeUtf8("WI"), LargeUtf8("NE")]), customer_address.ca_state IN ([LargeUtf8("SC"), LargeUtf8("IN"), LargeUtf8("VA"), LargeUtf8("WA"), LargeUtf8("KS"), LargeUtf8("KY"), LargeUtf8("SD"), LargeUtf8("WI"), LargeUtf8("NE")])] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: reason projection=[r_reason_sk, r_reason_desc] | +| physical_plan | SortPreservingMergeExec: [substr(reason.r_reason_desc,Int64(1),Int64(20))@0 ASC NULLS LAST, avg(web_sales.ws_quantity)@1 ASC NULLS LAST, avg(web_returns.wr_refunded_cash)@2 ASC NULLS LAST, avg(web_returns.wr_fee)@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[substr(reason.r_reason_desc,Int64(1),Int64(20))@0 ASC NULLS LAST, avg(web_sales.ws_quantity)@1 ASC NULLS LAST, avg(web_returns.wr_refunded_cash)@2 ASC NULLS LAST, avg(web_returns.wr_fee)@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[substr(r_reason_desc@0, 1, 20) as substr(reason.r_reason_desc,Int64(1),Int64(20)), avg(web_sales.ws_quantity)@1 as avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash)@2 as avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)@3 as avg(web_returns.wr_fee)] | +| | AggregateExec: mode=FinalPartitioned, gby=[r_reason_desc@0 as r_reason_desc], aggr=[avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_reason_desc@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[r_reason_desc@3 as r_reason_desc], aggr=[avg(web_sales.ws_quantity), avg(web_returns.wr_refunded_cash), avg(web_returns.wr_fee)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_reason_sk@1, r_reason_sk@0)], projection=[ws_quantity@0, wr_fee@2, wr_refunded_cash@3, r_reason_desc@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_reason_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_quantity@1, wr_reason_sk@2, wr_fee@3, wr_refunded_cash@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_refunded_addr_sk@3, ca_address_sk@0)], filter=(ca_state@1 = SC OR ca_state@1 = IN OR ca_state@1 = VA) AND ws_net_profit@0 >= Some(10000),7,2 AND ws_net_profit@0 <= Some(20000),7,2 OR (ca_state@1 = WA OR ca_state@1 = KS OR ca_state@1 = KY) AND ws_net_profit@0 >= Some(15000),7,2 AND ws_net_profit@0 <= Some(30000),7,2 OR (ca_state@1 = SD OR ca_state@1 = WI OR ca_state@1 = NE) AND ws_net_profit@0 >= Some(5000),7,2 AND ws_net_profit@0 <= Some(25000),7,2, projection=[ws_sold_date_sk@0, ws_quantity@1, wr_reason_sk@4, wr_fee@5, wr_refunded_cash@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_refunded_addr_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_returning_cdemo_sk@4, cd_demo_sk@0), (cd_marital_status@8, cd_marital_status@1), (cd_education_status@9, cd_education_status@2)], projection=[ws_sold_date_sk@0, ws_quantity@1, ws_net_profit@2, wr_refunded_addr_sk@3, wr_reason_sk@5, wr_fee@6, wr_refunded_cash@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_returning_cdemo_sk@4, cd_marital_status@8, cd_education_status@9], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_refunded_cdemo_sk@4, cd_demo_sk@0)], filter=cd_marital_status@1 = D AND cd_education_status@2 = Primary AND ws_sales_price@0 >= Some(10000),7,2 AND ws_sales_price@0 <= Some(15000),7,2 OR cd_marital_status@1 = U AND cd_education_status@2 = Unknown AND ws_sales_price@0 >= Some(5000),7,2 AND ws_sales_price@0 <= Some(10000),7,2 OR cd_marital_status@1 = M AND cd_education_status@2 = Advanced Degree AND ws_sales_price@0 >= Some(15000),7,2 AND ws_sales_price@0 <= Some(20000),7,2, projection=[ws_sold_date_sk@0, ws_quantity@1, ws_net_profit@3, wr_refunded_addr_sk@5, wr_returning_cdemo_sk@6, wr_reason_sk@7, wr_fee@8, wr_refunded_cash@9, cd_marital_status@11, cd_education_status@12] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_refunded_cdemo_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_page_sk@1, wp_web_page_sk@0)], projection=[ws_sold_date_sk@0, ws_quantity@2, ws_sales_price@3, ws_net_profit@4, wr_refunded_cdemo_sk@5, wr_refunded_addr_sk@6, wr_returning_cdemo_sk@7, wr_reason_sk@8, wr_fee@9, wr_refunded_cash@10] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_page_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@1, wr_item_sk@0), (ws_order_number@3, wr_order_number@5)], projection=[ws_sold_date_sk@0, ws_web_page_sk@2, ws_quantity@4, ws_sales_price@5, ws_net_profit@6, wr_refunded_cdemo_sk@8, wr_refunded_addr_sk@9, wr_returning_cdemo_sk@10, wr_reason_sk@11, wr_fee@13, wr_refunded_cash@14] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1, ws_order_number@3], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_web_page_sk, ws_order_number, ws_quantity, ws_sales_price, ws_net_profit], predicate=(ws_net_profit@33 >= Some(10000),7,2 AND ws_net_profit@33 <= Some(20000),7,2 OR ws_net_profit@33 >= Some(15000),7,2 AND ws_net_profit@33 <= Some(30000),7,2 OR ws_net_profit@33 >= Some(5000),7,2 AND ws_net_profit@33 <= Some(25000),7,2) AND (ws_sales_price@21 >= Some(10000),7,2 AND ws_sales_price@21 <= Some(15000),7,2 OR ws_sales_price@21 >= Some(5000),7,2 AND ws_sales_price@21 <= Some(10000),7,2 OR ws_sales_price@21 >= Some(15000),7,2 AND ws_sales_price@21 <= Some(20000),7,2), pruning_predicate=(ws_net_profit_null_count@1 != ws_net_profit_row_count@2 AND ws_net_profit_max@0 >= Some(10000),7,2 AND ws_net_profit_null_count@1 != ws_net_profit_row_count@2 AND ws_net_profit_min@3 <= Some(20000),7,2 OR ws_net_profit_null_count@1 != ws_net_profit_row_count@2 AND ws_net_profit_max@0 >= Some(15000),7,2 AND ws_net_profit_null_count@1 != ws_net_profit_row_count@2 AND ws_net_profit_min@3 <= Some(30000),7,2 OR ws_net_profit_null_count@1 != ws_net_profit_row_count@2 AND ws_net_profit_max@0 >= Some(5000),7,2 AND ws_net_profit_null_count@1 != ws_net_profit_row_count@2 AND ws_net_profit_min@3 <= Some(25000),7,2) AND (ws_sales_price_null_count@5 != ws_sales_price_row_count@6 AND ws_sales_price_max@4 >= Some(10000),7,2 AND ws_sales_price_null_count@5 != ws_sales_price_row_count@6 AND ws_sales_price_min@7 <= Some(15000),7,2 OR ws_sales_price_null_count@5 != ws_sales_price_row_count@6 AND ws_sales_price_max@4 >= Some(5000),7,2 AND ws_sales_price_null_count@5 != ws_sales_price_row_count@6 AND ws_sales_price_min@7 <= Some(10000),7,2 OR ws_sales_price_null_count@5 != ws_sales_price_row_count@6 AND ws_sales_price_max@4 >= Some(15000),7,2 AND ws_sales_price_null_count@5 != ws_sales_price_row_count@6 AND ws_sales_price_min@7 <= Some(20000),7,2), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_item_sk@0, wr_order_number@5], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_item_sk, wr_refunded_cdemo_sk, wr_refunded_addr_sk, wr_returning_cdemo_sk, wr_reason_sk, wr_order_number, wr_fee, wr_refunded_cash] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wp_web_page_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_page/web_page.parquet]]}, projection=[wp_web_page_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], predicate=cd_marital_status@2 = D AND cd_education_status@3 = Primary OR cd_marital_status@2 = U AND cd_education_status@3 = Unknown OR cd_marital_status@2 = M AND cd_education_status@3 = Advanced Degree, pruning_predicate=cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= D AND D <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Primary AND Primary <= cd_education_status_max@5 OR cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= U AND U <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Unknown AND Unknown <= cd_education_status_max@5 OR cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= M AND M <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Advanced Degree AND Advanced Degree <= cd_education_status_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0, cd_marital_status@1, cd_education_status@2], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_state], predicate=ca_country@10 = United States AND Use ca_state@8 IN (SET) ([Literal { value: LargeUtf8("SC") }, Literal { value: LargeUtf8("IN") }, Literal { value: LargeUtf8("VA") }, Literal { value: LargeUtf8("WA") }, Literal { value: LargeUtf8("KS") }, Literal { value: LargeUtf8("KY") }, Literal { value: LargeUtf8("SD") }, Literal { value: LargeUtf8("WI") }, Literal { value: LargeUtf8("NE") }]) AND Use ca_state@8 IN (SET) ([Literal { value: LargeUtf8("SC") }, Literal { value: LargeUtf8("IN") }, Literal { value: LargeUtf8("VA") }, Literal { value: LargeUtf8("WA") }, Literal { value: LargeUtf8("KS") }, Literal { value: LargeUtf8("KY") }, Literal { value: LargeUtf8("SD") }, Literal { value: LargeUtf8("WI") }, Literal { value: LargeUtf8("NE") }]), pruning_predicate=ca_country_null_count@2 != ca_country_row_count@3 AND ca_country_min@0 <= United States AND United States <= ca_country_max@1 AND (ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= SC AND SC <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= IN AND IN <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= VA AND VA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= WA AND WA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= KS AND KS <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= KY AND KY <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= SD AND SD <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= WI AND WI <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NE AND NE <= ca_state_max@5) AND (ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= SC AND SC <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= IN AND IN <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= VA AND VA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= WA AND WA <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= KS AND KS <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= KY AND KY <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= SD AND SD <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= WI AND WI <= ca_state_max@5 OR ca_state_null_count@6 != ca_state_row_count@7 AND ca_state_min@4 <= NE AND NE <= ca_state_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_reason_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/reason/reason.parquet]]}, projection=[r_reason_sk, r_reason_desc] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q86_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q86_explain.snap new file mode 100644 index 0000000000..fd8d677c86 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q86_explain.snap @@ -0,0 +1,57 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q86" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: lochierarchy DESC NULLS FIRST, CASE WHEN lochierarchy = Int32(0) THEN item.i_category END AS CASE WHEN lochierarchy = Int64(0) THEN item.i_category END ASC NULLS LAST, rank_within_parent ASC NULLS LAST, fetch=100 | +| | Projection: sum(web_sales.ws_net_paid) AS total_sum, item.i_category, item.i_class, grouping(item.i_category) + grouping(item.i_class) AS lochierarchy, rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank_within_parent | +| | WindowAggr: windowExpr=[[rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int32(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW AS rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW]] | +| | Projection: item.i_category, item.i_class, sum(web_sales.ws_net_paid), CAST(__grouping_id & UInt8(2) >> UInt8(1) AS Int32) AS grouping(item.i_category), CAST(__grouping_id & UInt8(1) AS Int32) AS grouping(item.i_class) | +| | Aggregate: groupBy=[[ROLLUP (item.i_category, item.i_class)]], aggr=[[sum(web_sales.ws_net_paid)]] | +| | Projection: web_sales.ws_net_paid, item.i_class, item.i_category | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | Projection: web_sales.ws_item_sk, web_sales.ws_net_paid | +| | Inner Join: web_sales.ws_sold_date_sk = d1.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_net_paid] | +| | SubqueryAlias: d1 | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1205), date_dim.d_month_seq <= Int32(1216)] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_class, i_category] | +| physical_plan | SortPreservingMergeExec: [lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[lochierarchy@3 DESC, CASE WHEN lochierarchy@3 = 0 THEN i_category@1 END ASC NULLS LAST, rank_within_parent@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[sum(web_sales.ws_net_paid)@2 as total_sum, i_category@0 as i_category, i_class@1 as i_class, grouping(item.i_category)@3 + grouping(item.i_class)@4 as lochierarchy, rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW@5 as rank_within_parent] | +| | BoundedWindowAggExec: wdw=[rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: Ok(Field { name: "rank() PARTITION BY [grouping(item.i_category) + grouping(item.i_class), CASE WHEN grouping(item.i_class) = Int64(0) THEN item.i_category END] ORDER BY [sum(web_sales.ws_net_paid) DESC NULLS FIRST] RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW", data_type: UInt64, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Range, start_bound: Preceding(Decimal128(None,17,2)), end_bound: CurrentRow, is_causal: false }], mode=[Sorted] | +| | SortExec: expr=[grouping(item.i_category)@3 + grouping(item.i_class)@4 ASC NULLS LAST, CASE WHEN grouping(item.i_class)@4 = 0 THEN i_category@0 END ASC NULLS LAST, sum(web_sales.ws_net_paid)@2 DESC], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([grouping(item.i_category)@3 + grouping(item.i_class)@4, CASE WHEN grouping(item.i_class)@4 = 0 THEN i_category@0 END], 24), input_partitions=24 | +| | ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, sum(web_sales.ws_net_paid)@3 as sum(web_sales.ws_net_paid), CAST(__grouping_id@2 & 2 >> 1 AS Int32) as grouping(item.i_category), CAST(__grouping_id@2 & 1 AS Int32) as grouping(item.i_class)] | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class, __grouping_id@2 as __grouping_id], aggr=[sum(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_class@1, __grouping_id@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[(NULL as i_category, NULL as i_class), (i_category@2 as i_category, NULL as i_class), (i_category@2 as i_category, i_class@1 as i_class)], aggr=[sum(web_sales.ws_net_paid)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@0, i_item_sk@0)], projection=[ws_net_paid@1, i_class@3, i_category@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_net_paid@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_net_paid] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1205 AND d_month_seq@3 <= 1216, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1205 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1216, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_class, i_category] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q87_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q87_explain.snap new file mode 100644 index 0000000000..ca6378ac18 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q87_explain.snap @@ -0,0 +1,132 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q87" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | SubqueryAlias: cool_cust | +| | Projection: | +| | LeftAnti Join: customer.c_last_name = customer.c_last_name, customer.c_first_name = customer.c_first_name, date_dim.d_date = date_dim.d_date | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | LeftAnti Join: customer.c_last_name = customer.c_last_name, customer.c_first_name = customer.c_first_name, date_dim.d_date = date_dim.d_date | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date | +| | Inner Join: store_sales.ss_customer_sk = customer.c_customer_sk | +| | Projection: store_sales.ss_customer_sk, date_dim.d_date | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1189), date_dim.d_month_seq <= Int32(1200)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date | +| | Inner Join: catalog_sales.cs_bill_customer_sk = customer.c_customer_sk | +| | Projection: catalog_sales.cs_bill_customer_sk, date_dim.d_date | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1189), date_dim.d_month_seq <= Int32(1200)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| | Aggregate: groupBy=[[customer.c_last_name, customer.c_first_name, date_dim.d_date]], aggr=[[]] | +| | Projection: customer.c_last_name, customer.c_first_name, date_dim.d_date | +| | Inner Join: web_sales.ws_bill_customer_sk = customer.c_customer_sk | +| | Projection: web_sales.ws_bill_customer_sk, date_dim.d_date | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_date], full_filters=[date_dim.d_month_seq >= Int32(1189), date_dim.d_month_seq <= Int32(1200)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_first_name, c_last_name] | +| physical_plan | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)] | +| | AggregateExec: mode=SinglePartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(c_last_name@0, c_last_name@0), (c_first_name@1, c_first_name@1), (d_date@2, d_date@2)] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | ProjectionExec: expr=[c_last_name@2 as c_last_name, c_first_name@1 as c_first_name, d_date@0 as d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_customer_sk@0, c_customer_sk@0)], projection=[d_date@1, c_first_name@3, c_last_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_customer_sk@1, d_date@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1189 AND d_month_seq@3 <= 1200, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1189 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1200, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_first_name, c_last_name] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | ProjectionExec: expr=[c_last_name@2 as c_last_name, c_first_name@1 as c_first_name, d_date@0 as d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_bill_customer_sk@0, c_customer_sk@0)], projection=[d_date@1, c_first_name@3, c_last_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_bill_customer_sk@1, d_date@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1189 AND d_month_seq@3 <= 1200, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1189 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1200, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_first_name, c_last_name] | +| | AggregateExec: mode=FinalPartitioned, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_last_name@0, c_first_name@1, d_date@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[c_last_name@0 as c_last_name, c_first_name@1 as c_first_name, d_date@2 as d_date], aggr=[] | +| | ProjectionExec: expr=[c_last_name@2 as c_last_name, c_first_name@1 as c_first_name, d_date@0 as d_date] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_bill_customer_sk@0, c_customer_sk@0)], projection=[d_date@1, c_first_name@3, c_last_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_bill_customer_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_bill_customer_sk@1, d_date@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_bill_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_date], predicate=d_month_seq@3 >= 1189 AND d_month_seq@3 <= 1200, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1189 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1200, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_first_name, c_last_name] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q88_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q88_explain.snap new file mode 100644 index 0000000000..09a83e7028 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q88_explain.snap @@ -0,0 +1,437 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q88" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | Cross Join: | +| | SubqueryAlias: s1 | +| | Projection: count(*) AS h8_30_to_9 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(8), time_dim.t_minute >= Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| | SubqueryAlias: s2 | +| | Projection: count(*) AS h9_to_9_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(9), time_dim.t_minute < Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| | SubqueryAlias: s3 | +| | Projection: count(*) AS h9_30_to_10 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(9), time_dim.t_minute >= Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| | SubqueryAlias: s4 | +| | Projection: count(*) AS h10_to_10_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(10), time_dim.t_minute < Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| | SubqueryAlias: s5 | +| | Projection: count(*) AS h10_30_to_11 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(10), time_dim.t_minute >= Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| | SubqueryAlias: s6 | +| | Projection: count(*) AS h11_to_11_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(11), time_dim.t_minute < Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| | SubqueryAlias: s7 | +| | Projection: count(*) AS h11_30_to_12 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(11), time_dim.t_minute >= Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| | SubqueryAlias: s8 | +| | Projection: count(*) AS h12_to_12_30 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2) AND household_demographics.hd_vehicle_count <= Int32(4) OR household_demographics.hd_dep_count = Int32(1) AND household_demographics.hd_vehicle_count <= Int32(3) OR household_demographics.hd_dep_count = Int32(4) AND household_demographics.hd_vehicle_count <= Int32(6)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(12), time_dim.t_minute < Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| physical_plan | ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@5 as h10_30_to_11, h11_to_11_30@6 as h11_to_11_30, h11_30_to_12@7 as h11_30_to_12, h12_to_12_30@0 as h12_to_12_30] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as h12_to_12_30] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 12 AND t_minute@4 < 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 12 AND 12 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_min@4 < 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@5 as h10_30_to_11, h11_to_11_30@6 as h11_to_11_30, h11_30_to_12@0 as h11_30_to_12] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as h11_30_to_12] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 11 AND t_minute@4 >= 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 11 AND 11 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_max@4 >= 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@5 as h10_30_to_11, h11_to_11_30@0 as h11_to_11_30] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as h11_to_11_30] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 11 AND t_minute@4 < 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 11 AND 11 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_min@4 < 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@4 as h10_to_10_30, h10_30_to_11@0 as h10_30_to_11] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as h10_30_to_11] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 10 AND t_minute@4 >= 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 10 AND 10 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_max@4 >= 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@3 as h9_30_to_10, h10_to_10_30@0 as h10_to_10_30] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as h10_to_10_30] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 10 AND t_minute@4 < 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 10 AND 10 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_min@4 < 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[h8_30_to_9@1 as h8_30_to_9, h9_to_9_30@2 as h9_to_9_30, h9_30_to_10@0 as h9_30_to_10] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as h9_30_to_10] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 9 AND t_minute@4 >= 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 9 AND 9 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_max@4 >= 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as h8_30_to_9] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 8 AND t_minute@4 >= 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 8 AND 8 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_max@4 >= 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | ProjectionExec: expr=[count(*)@0 as h9_to_9_30] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2 AND hd_vehicle_count@4 <= 4 OR hd_dep_count@3 = 1 AND hd_vehicle_count@4 <= 3 OR hd_dep_count@3 = 4 AND hd_vehicle_count@4 <= 6, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 4 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 1 AND 1 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 3 OR hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 4 AND 4 <= hd_dep_count_max@1 AND hd_vehicle_count_null_count@5 != hd_vehicle_count_row_count@6 AND hd_vehicle_count_min@4 <= 6, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 9 AND t_minute@4 < 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 9 AND 9 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_min@4 < 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q89_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q89_explain.snap new file mode 100644 index 0000000000..eae27e649b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q89_explain.snap @@ -0,0 +1,71 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q89" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: tmp1.sum_sales - tmp1.avg_monthly_sales ASC NULLS LAST, tmp1.s_store_name ASC NULLS LAST, fetch=100 | +| | SubqueryAlias: tmp1 | +| | Projection: item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy, sum(store_sales.ss_sales_price) AS sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS avg_monthly_sales | +| | Filter: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING != Decimal128(Some(0),21,6) THEN abs(sum(store_sales.ss_sales_price) - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ELSE Decimal128(None,32,10) END > Decimal128(Some(1000000000),32,10) | +| | WindowAggr: windowExpr=[[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_category, item.i_class, item.i_brand, store.s_store_name, store.s_company_name, date_dim.d_moy]], aggr=[[sum(store_sales.ss_sales_price)]] | +| | Projection: item.i_brand, item.i_class, item.i_category, store_sales.ss_sales_price, date_dim.d_moy, store.s_store_name, store.s_company_name | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: item.i_brand, item.i_class, item.i_category, store_sales.ss_store_sk, store_sales.ss_sales_price, date_dim.d_moy | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: item.i_brand, item.i_class, item.i_category, store_sales.ss_sold_date_sk, store_sales.ss_store_sk, store_sales.ss_sales_price | +| | Inner Join: item.i_item_sk = store_sales.ss_item_sk | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_brand, i_class, i_category], full_filters=[(item.i_category = LargeUtf8("Children") OR item.i_category = LargeUtf8("Jewelry") OR item.i_category = LargeUtf8("Home")) AND (item.i_class = LargeUtf8("infants") OR item.i_class = LargeUtf8("birdal") OR item.i_class = LargeUtf8("flatware")) OR (item.i_category = LargeUtf8("Electronics") OR item.i_category = LargeUtf8("Music") OR item.i_category = LargeUtf8("Books")) AND (item.i_class = LargeUtf8("audio") OR item.i_class = LargeUtf8("classical") OR item.i_class = LargeUtf8("science"))] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk, d_moy], full_filters=[date_dim.d_year = Int32(2001)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_company_name] | +| physical_plan | SortPreservingMergeExec: [sum_sales@6 - avg_monthly_sales@7 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[sum_sales@6 - avg_monthly_sales@7 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, s_store_name@3 as s_store_name, s_company_name@4 as s_company_name, d_moy@5 as d_moy, sum(store_sales.ss_sales_price)@6 as sum_sales, avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 as avg_monthly_sales] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: CASE WHEN avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 != Some(0),21,6 THEN abs(sum(store_sales.ss_sales_price)@6 - avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7) / avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@7 END > Some(1000000000),32,10 | +| | WindowAggExec: wdw=[avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "avg(sum(store_sales.ss_sales_price)) PARTITION BY [item.i_category, item.i_brand, store.s_store_name, store.s_company_name] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(21, 6), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_category@0 ASC NULLS LAST, i_brand@2 ASC NULLS LAST, s_store_name@3 ASC NULLS LAST, s_company_name@4 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_brand@2, s_store_name@3, s_company_name@4], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_category@0 as i_category, i_class@1 as i_class, i_brand@2 as i_brand, s_store_name@3 as s_store_name, s_company_name@4 as s_company_name, d_moy@5 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_category@0, i_class@1, i_brand@2, s_store_name@3, s_company_name@4, d_moy@5], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_category@2 as i_category, i_class@1 as i_class, i_brand@0 as i_brand, s_store_name@5 as s_store_name, s_company_name@6 as s_company_name, d_moy@4 as d_moy], aggr=[sum(store_sales.ss_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@3, s_store_sk@0)], projection=[i_brand@0, i_class@1, i_category@2, ss_sales_price@4, d_moy@5, s_store_name@7, s_company_name@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@3, d_date_sk@0)], projection=[i_brand@0, i_class@1, i_category@2, ss_store_sk@4, ss_sales_price@5, d_moy@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@0, ss_item_sk@1)], projection=[i_brand@1, i_class@2, i_category@3, ss_sold_date_sk@4, ss_store_sk@6, ss_sales_price@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_brand, i_class, i_category], predicate=(i_category@12 = Children OR i_category@12 = Jewelry OR i_category@12 = Home) AND (i_class@10 = infants OR i_class@10 = birdal OR i_class@10 = flatware) OR (i_category@12 = Electronics OR i_category@12 = Music OR i_category@12 = Books) AND (i_class@10 = audio OR i_class@10 = classical OR i_class@10 = science), pruning_predicate=(i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Children AND Children <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Jewelry AND Jewelry <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Home AND Home <= i_category_max@1) AND (i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= infants AND infants <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= birdal AND birdal <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= flatware AND flatware <= i_class_max@5) OR (i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Electronics AND Electronics <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Music AND Music <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Books AND Books <= i_category_max@1) AND (i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= audio AND audio <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= classical AND classical <= i_class_max@5 OR i_class_null_count@6 != i_class_row_count@7 AND i_class_min@4 <= science AND science <= i_class_max@5), required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_store_sk, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk, d_moy], predicate=d_year@6 = 2001, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2001 AND 2001 <= d_year_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_company_name] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q8_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q8_explain.snap new file mode 100644 index 0000000000..5466f9901e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q8_explain.snap @@ -0,0 +1,105 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q8" +--- ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: store.s_store_name ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[store.s_store_name]], aggr=[[sum(store_sales.ss_net_profit)]] | +| | Projection: store_sales.ss_net_profit, store.s_store_name | +| | Inner Join: substr(store.s_zip, Int64(1), Int64(2)) = substr(V1.ca_zip, Int64(1), Int64(2)) | +| | Projection: store_sales.ss_net_profit, store.s_store_name, store.s_zip | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk, store_sales.ss_net_profit | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_qoy = Int32(1), date_dim.d_year = Int32(2000)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk, s_store_name, s_zip] | +| | SubqueryAlias: V1 | +| | SubqueryAlias: A2 | +| | LeftSemi Join: ca_zip = A1.ca_zip | +| | Aggregate: groupBy=[[ca_zip]], aggr=[[]] | +| | Projection: substr(customer_address.ca_zip, Int64(1), Int64(5)) AS ca_zip | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_zip], full_filters=[substr(customer_address.ca_zip, Int64(1), Int64(5)) IN ([LargeUtf8("19100"), LargeUtf8("41548"), LargeUtf8("51640"), LargeUtf8("49699"), LargeUtf8("88329"), LargeUtf8("55986"), LargeUtf8("85119"), LargeUtf8("19510"), LargeUtf8("61020"), LargeUtf8("95452"), LargeUtf8("26235"), LargeUtf8("51102"), LargeUtf8("16733"), LargeUtf8("42819"), LargeUtf8("27823"), LargeUtf8("90192"), LargeUtf8("31905"), LargeUtf8("28865"), LargeUtf8("62197"), LargeUtf8("23750"), LargeUtf8("81398"), LargeUtf8("95288"), LargeUtf8("45114"), LargeUtf8("82060"), LargeUtf8("12313"), LargeUtf8("25218"), LargeUtf8("64386"), LargeUtf8("46400"), LargeUtf8("77230"), LargeUtf8("69271"), LargeUtf8("43672"), LargeUtf8("36521"), LargeUtf8("34217"), LargeUtf8("13017"), LargeUtf8("27936"), LargeUtf8("42766"), LargeUtf8("59233"), LargeUtf8("26060"), LargeUtf8("27477"), LargeUtf8("39981"), LargeUtf8("93402"), LargeUtf8("74270"), LargeUtf8("13932"), LargeUtf8("51731"), LargeUtf8("71642"), LargeUtf8("17710"), LargeUtf8("85156"), LargeUtf8("21679"), LargeUtf8("70840"), LargeUtf8("67191"), LargeUtf8("39214"), LargeUtf8("35273"), LargeUtf8("27293"), LargeUtf8("17128"), LargeUtf8("15458"), LargeUtf8("31615"), LargeUtf8("60706"), LargeUtf8("67657"), LargeUtf8("54092"), LargeUtf8("32775"), LargeUtf8("14683"), LargeUtf8("32206"), LargeUtf8("62543"), LargeUtf8("43053"), LargeUtf8("11297"), LargeUtf8("58216"), LargeUtf8("49410"), LargeUtf8("14710"), LargeUtf8("24501"), LargeUtf8("79057"), LargeUtf8("77038"), LargeUtf8("91286"), LargeUtf8("32334"), LargeUtf8("46298"), LargeUtf8("18326"), LargeUtf8("67213"), LargeUtf8("65382"), LargeUtf8("40315"), LargeUtf8("56115"), LargeUtf8("80162"), LargeUtf8("55956"), LargeUtf8("81583"), LargeUtf8("73588"), LargeUtf8("32513"), LargeUtf8("62880"), LargeUtf8("12201"), LargeUtf8("11592"), LargeUtf8("17014"), LargeUtf8("83832"), LargeUtf8("61796"), LargeUtf8("57872"), LargeUtf8("78829"), LargeUtf8("69912"), LargeUtf8("48524"), LargeUtf8("22016"), LargeUtf8("26905"), LargeUtf8("48511"), LargeUtf8("92168"), LargeUtf8("63051"), LargeUtf8("25748"), LargeUtf8("89786"), LargeUtf8("98827"), LargeUtf8("86404"), LargeUtf8("53029"), LargeUtf8("37524"), LargeUtf8("14039"), LargeUtf8("50078"), LargeUtf8("34487"), LargeUtf8("70142"), LargeUtf8("18697"), LargeUtf8("40129"), LargeUtf8("60642"), LargeUtf8("42810"), LargeUtf8("62667"), LargeUtf8("57183"), LargeUtf8("46414"), LargeUtf8("58463"), LargeUtf8("71211"), LargeUtf8("46364"), LargeUtf8("34851"), LargeUtf8("54884"), LargeUtf8("25382"), LargeUtf8("25239"), LargeUtf8("74126"), LargeUtf8("21568"), LargeUtf8("84204"), LargeUtf8("13607"), LargeUtf8("82518"), LargeUtf8("32982"), LargeUtf8("36953"), LargeUtf8("86001"), LargeUtf8("79278"), LargeUtf8("21745"), LargeUtf8("64444"), LargeUtf8("35199"), LargeUtf8("83181"), LargeUtf8("73255"), LargeUtf8("86177"), LargeUtf8("98043"), LargeUtf8("90392"), LargeUtf8("13882"), LargeUtf8("47084"), LargeUtf8("17859"), LargeUtf8("89526"), LargeUtf8("42072"), LargeUtf8("20233"), LargeUtf8("52745"), LargeUtf8("75000"), LargeUtf8("22044"), LargeUtf8("77013"), LargeUtf8("24182"), LargeUtf8("52554"), LargeUtf8("56138"), LargeUtf8("43440"), LargeUtf8("86100"), LargeUtf8("48791"), LargeUtf8("21883"), LargeUtf8("17096"), LargeUtf8("15965"), LargeUtf8("31196"), LargeUtf8("74903"), LargeUtf8("19810"), LargeUtf8("35763"), LargeUtf8("92020"), LargeUtf8("55176"), LargeUtf8("54433"), LargeUtf8("68063"), LargeUtf8("71919"), LargeUtf8("44384"), LargeUtf8("16612"), LargeUtf8("32109"), LargeUtf8("28207"), LargeUtf8("14762"), LargeUtf8("89933"), LargeUtf8("10930"), LargeUtf8("27616"), LargeUtf8("56809"), LargeUtf8("14244"), LargeUtf8("22733"), LargeUtf8("33177"), LargeUtf8("29784"), LargeUtf8("74968"), LargeUtf8("37887"), LargeUtf8("11299"), LargeUtf8("34692"), LargeUtf8("85843"), LargeUtf8("83663"), LargeUtf8("95421"), LargeUtf8("19323"), LargeUtf8("17406"), LargeUtf8("69264"), LargeUtf8("28341"), LargeUtf8("50150"), LargeUtf8("79121"), LargeUtf8("73974"), LargeUtf8("92917"), LargeUtf8("21229"), LargeUtf8("32254"), LargeUtf8("97408"), LargeUtf8("46011"), LargeUtf8("37169"), LargeUtf8("18146"), LargeUtf8("27296"), LargeUtf8("62927"), LargeUtf8("68812"), LargeUtf8("47734"), LargeUtf8("86572"), LargeUtf8("12620"), LargeUtf8("80252"), LargeUtf8("50173"), LargeUtf8("27261"), LargeUtf8("29534"), LargeUtf8("23488"), LargeUtf8("42184"), LargeUtf8("23695"), LargeUtf8("45868"), LargeUtf8("12910"), LargeUtf8("23429"), LargeUtf8("29052"), LargeUtf8("63228"), LargeUtf8("30731"), LargeUtf8("15747"), LargeUtf8("25827"), LargeUtf8("22332"), LargeUtf8("62349"), LargeUtf8("56661"), LargeUtf8("44652"), LargeUtf8("51862"), LargeUtf8("57007"), LargeUtf8("22773"), LargeUtf8("40361"), LargeUtf8("65238"), LargeUtf8("19327"), LargeUtf8("17282"), LargeUtf8("44708"), LargeUtf8("35484"), LargeUtf8("34064"), LargeUtf8("11148"), LargeUtf8("92729"), LargeUtf8("22995"), LargeUtf8("18833"), LargeUtf8("77528"), LargeUtf8("48917"), LargeUtf8("17256"), LargeUtf8("93166"), LargeUtf8("68576"), LargeUtf8("71096"), LargeUtf8("56499"), LargeUtf8("35096"), LargeUtf8("80551"), LargeUtf8("82424"), LargeUtf8("17700"), LargeUtf8("32748"), LargeUtf8("78969"), LargeUtf8("46820"), LargeUtf8("57725"), LargeUtf8("46179"), LargeUtf8("54677"), LargeUtf8("98097"), LargeUtf8("62869"), LargeUtf8("83959"), LargeUtf8("66728"), LargeUtf8("19716"), LargeUtf8("48326"), LargeUtf8("27420"), LargeUtf8("53458"), LargeUtf8("69056"), LargeUtf8("84216"), LargeUtf8("36688"), LargeUtf8("63957"), LargeUtf8("41469"), LargeUtf8("66843"), LargeUtf8("18024"), LargeUtf8("81950"), LargeUtf8("21911"), LargeUtf8("58387"), LargeUtf8("58103"), LargeUtf8("19813"), LargeUtf8("34581"), LargeUtf8("55347"), LargeUtf8("17171"), LargeUtf8("35914"), LargeUtf8("75043"), LargeUtf8("75088"), LargeUtf8("80541"), LargeUtf8("26802"), LargeUtf8("28849"), LargeUtf8("22356"), LargeUtf8("57721"), LargeUtf8("77084"), LargeUtf8("46385"), LargeUtf8("59255"), LargeUtf8("29308"), LargeUtf8("65885"), LargeUtf8("70673"), LargeUtf8("13306"), LargeUtf8("68788"), LargeUtf8("87335"), LargeUtf8("40987"), LargeUtf8("31654"), LargeUtf8("67560"), LargeUtf8("92309"), LargeUtf8("78116"), LargeUtf8("65961"), LargeUtf8("45018"), LargeUtf8("16548"), LargeUtf8("67092"), LargeUtf8("21818"), LargeUtf8("33716"), LargeUtf8("49449"), LargeUtf8("86150"), LargeUtf8("12156"), LargeUtf8("27574"), LargeUtf8("43201"), LargeUtf8("50977"), LargeUtf8("52839"), LargeUtf8("33234"), LargeUtf8("86611"), LargeUtf8("71494"), LargeUtf8("17823"), LargeUtf8("57172"), LargeUtf8("59869"), LargeUtf8("34086"), LargeUtf8("51052"), LargeUtf8("11320"), LargeUtf8("39717"), LargeUtf8("79604"), LargeUtf8("24672"), LargeUtf8("70555"), LargeUtf8("38378"), LargeUtf8("91135"), LargeUtf8("15567"), LargeUtf8("21606"), LargeUtf8("74994"), LargeUtf8("77168"), LargeUtf8("38607"), LargeUtf8("27384"), LargeUtf8("68328"), LargeUtf8("88944"), LargeUtf8("40203"), LargeUtf8("37893"), LargeUtf8("42726"), LargeUtf8("83549"), LargeUtf8("48739"), LargeUtf8("55652"), LargeUtf8("27543"), LargeUtf8("23109"), LargeUtf8("98908"), LargeUtf8("28831"), LargeUtf8("45011"), LargeUtf8("47525"), LargeUtf8("43870"), LargeUtf8("79404"), LargeUtf8("35780"), LargeUtf8("42136"), LargeUtf8("49317"), LargeUtf8("14574"), LargeUtf8("99586"), LargeUtf8("21107"), LargeUtf8("14302"), LargeUtf8("83882"), LargeUtf8("81272"), LargeUtf8("92552"), LargeUtf8("14916"), LargeUtf8("87533"), LargeUtf8("86518"), LargeUtf8("17862"), LargeUtf8("30741"), LargeUtf8("96288"), LargeUtf8("57886"), LargeUtf8("30304"), LargeUtf8("24201"), LargeUtf8("79457"), LargeUtf8("36728"), LargeUtf8("49833"), LargeUtf8("35182"), LargeUtf8("20108"), LargeUtf8("39858"), LargeUtf8("10804"), LargeUtf8("47042"), LargeUtf8("20439"), LargeUtf8("54708"), LargeUtf8("59027"), LargeUtf8("82499"), LargeUtf8("75311"), LargeUtf8("26548"), LargeUtf8("53406"), LargeUtf8("92060"), LargeUtf8("41152"), LargeUtf8("60446"), LargeUtf8("33129"), LargeUtf8("43979"), LargeUtf8("16903"), LargeUtf8("60319"), LargeUtf8("35550"), LargeUtf8("33887"), LargeUtf8("25463"), LargeUtf8("40343"), LargeUtf8("20726"), LargeUtf8("44429")])] | +| | SubqueryAlias: A1 | +| | Projection: substr(customer_address.ca_zip, Int64(1), Int64(5)) AS ca_zip | +| | Filter: count(*) > Int64(10) | +| | Aggregate: groupBy=[[customer_address.ca_zip]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: customer_address.ca_zip | +| | Inner Join: customer_address.ca_address_sk = customer.c_current_addr_sk | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk, ca_zip] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_current_addr_sk], full_filters=[customer.c_preferred_cust_flag = LargeUtf8("Y")] | +| physical_plan | SortPreservingMergeExec: [s_store_name@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[s_store_name@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | AggregateExec: mode=FinalPartitioned, gby=[s_store_name@0 as s_store_name], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_name@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[s_store_name@1 as s_store_name], aggr=[sum(store_sales.ss_net_profit)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(substr(store.s_zip,Int64(1),Int64(2))@3, substr(V1.ca_zip,Int64(1),Int64(2))@1)], projection=[ss_net_profit@0, s_store_name@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([substr(store.s_zip,Int64(1),Int64(2))@3], 24), input_partitions=24 | +| | ProjectionExec: expr=[ss_net_profit@0 as ss_net_profit, s_store_name@1 as s_store_name, s_zip@2 as s_zip, substr(s_zip@2, 1, 2) as substr(store.s_zip,Int64(1),Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)], projection=[ss_net_profit@1, s_store_name@3, s_zip@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_store_sk@1, ss_net_profit@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_store_sk, ss_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_qoy@10 = 1 AND d_year@6 = 2000, pruning_predicate=d_qoy_null_count@2 != d_qoy_row_count@3 AND d_qoy_min@0 <= 1 AND 1 <= d_qoy_max@1 AND d_year_null_count@6 != d_year_row_count@7 AND d_year_min@4 <= 2000 AND 2000 <= d_year_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk, s_store_name, s_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([substr(V1.ca_zip,Int64(1),Int64(2))@1], 24), input_partitions=24 | +| | ProjectionExec: expr=[ca_zip@0 as ca_zip, substr(ca_zip@0, 1, 2) as substr(V1.ca_zip,Int64(1),Int64(2))] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ca_zip@0, ca_zip@0)] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_zip@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_zip@0 as ca_zip], aggr=[] | +| | ProjectionExec: expr=[substr(ca_zip@0, 1, 5) as ca_zip] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_zip], predicate=Use substr(ca_zip@9, 1, 5) IN (SET) ([Literal { value: LargeUtf8("19100") }, Literal { value: LargeUtf8("41548") }, Literal { value: LargeUtf8("51640") }, Literal { value: LargeUtf8("49699") }, Literal { value: LargeUtf8("88329") }, Literal { value: LargeUtf8("55986") }, Literal { value: LargeUtf8("85119") }, Literal { value: LargeUtf8("19510") }, Literal { value: LargeUtf8("61020") }, Literal { value: LargeUtf8("95452") }, Literal { value: LargeUtf8("26235") }, Literal { value: LargeUtf8("51102") }, Literal { value: LargeUtf8("16733") }, Literal { value: LargeUtf8("42819") }, Literal { value: LargeUtf8("27823") }, Literal { value: LargeUtf8("90192") }, Literal { value: LargeUtf8("31905") }, Literal { value: LargeUtf8("28865") }, Literal { value: LargeUtf8("62197") }, Literal { value: LargeUtf8("23750") }, Literal { value: LargeUtf8("81398") }, Literal { value: LargeUtf8("95288") }, Literal { value: LargeUtf8("45114") }, Literal { value: LargeUtf8("82060") }, Literal { value: LargeUtf8("12313") }, Literal { value: LargeUtf8("25218") }, Literal { value: LargeUtf8("64386") }, Literal { value: LargeUtf8("46400") }, Literal { value: LargeUtf8("77230") }, Literal { value: LargeUtf8("69271") }, Literal { value: LargeUtf8("43672") }, Literal { value: LargeUtf8("36521") }, Literal { value: LargeUtf8("34217") }, Literal { value: LargeUtf8("13017") }, Literal { value: LargeUtf8("27936") }, Literal { value: LargeUtf8("42766") }, Literal { value: LargeUtf8("59233") }, Literal { value: LargeUtf8("26060") }, Literal { value: LargeUtf8("27477") }, Literal { value: LargeUtf8("39981") }, Literal { value: LargeUtf8("93402") }, Literal { value: LargeUtf8("74270") }, Literal { value: LargeUtf8("13932") }, Literal { value: LargeUtf8("51731") }, Literal { value: LargeUtf8("71642") }, Literal { value: LargeUtf8("17710") }, Literal { value: LargeUtf8("85156") }, Literal { value: LargeUtf8("21679") }, Literal { value: LargeUtf8("70840") }, Literal { value: LargeUtf8("67191") }, Literal { value: LargeUtf8("39214") }, Literal { value: LargeUtf8("35273") }, Literal { value: LargeUtf8("27293") }, Literal { value: LargeUtf8("17128") }, Literal { value: LargeUtf8("15458") }, Literal { value: LargeUtf8("31615") }, Literal { value: LargeUtf8("60706") }, Literal { value: LargeUtf8("67657") }, Literal { value: LargeUtf8("54092") }, Literal { value: LargeUtf8("32775") }, Literal { value: LargeUtf8("14683") }, Literal { value: LargeUtf8("32206") }, Literal { value: LargeUtf8("62543") }, Literal { value: LargeUtf8("43053") }, Literal { value: LargeUtf8("11297") }, Literal { value: LargeUtf8("58216") }, Literal { value: LargeUtf8("49410") }, Literal { value: LargeUtf8("14710") }, Literal { value: LargeUtf8("24501") }, Literal { value: LargeUtf8("79057") }, Literal { value: LargeUtf8("77038") }, Literal { value: LargeUtf8("91286") }, Literal { value: LargeUtf8("32334") }, Literal { value: LargeUtf8("46298") }, Literal { value: LargeUtf8("18326") }, Literal { value: LargeUtf8("67213") }, Literal { value: LargeUtf8("65382") }, Literal { value: LargeUtf8("40315") }, Literal { value: LargeUtf8("56115") }, Literal { value: LargeUtf8("80162") }, Literal { value: LargeUtf8("55956") }, Literal { value: LargeUtf8("81583") }, Literal { value: LargeUtf8("73588") }, Literal { value: LargeUtf8("32513") }, Literal { value: LargeUtf8("62880") }, Literal { value: LargeUtf8("12201") }, Literal { value: LargeUtf8("11592") }, Literal { value: LargeUtf8("17014") }, Literal { value: LargeUtf8("83832") }, Literal { value: LargeUtf8("61796") }, Literal { value: LargeUtf8("57872") }, Literal { value: LargeUtf8("78829") }, Literal { value: LargeUtf8("69912") }, Literal { value: LargeUtf8("48524") }, Literal { value: LargeUtf8("22016") }, Literal { value: LargeUtf8("26905") }, Literal { value: LargeUtf8("48511") }, Literal { value: LargeUtf8("92168") }, Literal { value: LargeUtf8("63051") }, Literal { value: LargeUtf8("25748") }, Literal { value: LargeUtf8("89786") }, Literal { value: LargeUtf8("98827") }, Literal { value: LargeUtf8("86404") }, Literal { value: LargeUtf8("53029") }, Literal { value: LargeUtf8("37524") }, Literal { value: LargeUtf8("14039") }, Literal { value: LargeUtf8("50078") }, Literal { value: LargeUtf8("34487") }, Literal { value: LargeUtf8("70142") }, Literal { value: LargeUtf8("18697") }, Literal { value: LargeUtf8("40129") }, Literal { value: LargeUtf8("60642") }, Literal { value: LargeUtf8("42810") }, Literal { value: LargeUtf8("62667") }, Literal { value: LargeUtf8("57183") }, Literal { value: LargeUtf8("46414") }, Literal { value: LargeUtf8("58463") }, Literal { value: LargeUtf8("71211") }, Literal { value: LargeUtf8("46364") }, Literal { value: LargeUtf8("34851") }, Literal { value: LargeUtf8("54884") }, Literal { value: LargeUtf8("25382") }, Literal { value: LargeUtf8("25239") }, Literal { value: LargeUtf8("74126") }, Literal { value: LargeUtf8("21568") }, Literal { value: LargeUtf8("84204") }, Literal { value: LargeUtf8("13607") }, Literal { value: LargeUtf8("82518") }, Literal { value: LargeUtf8("32982") }, Literal { value: LargeUtf8("36953") }, Literal { value: LargeUtf8("86001") }, Literal { value: LargeUtf8("79278") }, Literal { value: LargeUtf8("21745") }, Literal { value: LargeUtf8("64444") }, Literal { value: LargeUtf8("35199") }, Literal { value: LargeUtf8("83181") }, Literal { value: LargeUtf8("73255") }, Literal { value: LargeUtf8("86177") }, Literal { value: LargeUtf8("98043") }, Literal { value: LargeUtf8("90392") }, Literal { value: LargeUtf8("13882") }, Literal { value: LargeUtf8("47084") }, Literal { value: LargeUtf8("17859") }, Literal { value: LargeUtf8("89526") }, Literal { value: LargeUtf8("42072") }, Literal { value: LargeUtf8("20233") }, Literal { value: LargeUtf8("52745") }, Literal { value: LargeUtf8("75000") }, Literal { value: LargeUtf8("22044") }, Literal { value: LargeUtf8("77013") }, Literal { value: LargeUtf8("24182") }, Literal { value: LargeUtf8("52554") }, Literal { value: LargeUtf8("56138") }, Literal { value: LargeUtf8("43440") }, Literal { value: LargeUtf8("86100") }, Literal { value: LargeUtf8("48791") }, Literal { value: LargeUtf8("21883") }, Literal { value: LargeUtf8("17096") }, Literal { value: LargeUtf8("15965") }, Literal { value: LargeUtf8("31196") }, Literal { value: LargeUtf8("74903") }, Literal { value: LargeUtf8("19810") }, Literal { value: LargeUtf8("35763") }, Literal { value: LargeUtf8("92020") }, Literal { value: LargeUtf8("55176") }, Literal { value: LargeUtf8("54433") }, Literal { value: LargeUtf8("68063") }, Literal { value: LargeUtf8("71919") }, Literal { value: LargeUtf8("44384") }, Literal { value: LargeUtf8("16612") }, Literal { value: LargeUtf8("32109") }, Literal { value: LargeUtf8("28207") }, Literal { value: LargeUtf8("14762") }, Literal { value: LargeUtf8("89933") }, Literal { value: LargeUtf8("10930") }, Literal { value: LargeUtf8("27616") }, Literal { value: LargeUtf8("56809") }, Literal { value: LargeUtf8("14244") }, Literal { value: LargeUtf8("22733") }, Literal { value: LargeUtf8("33177") }, Literal { value: LargeUtf8("29784") }, Literal { value: LargeUtf8("74968") }, Literal { value: LargeUtf8("37887") }, Literal { value: LargeUtf8("11299") }, Literal { value: LargeUtf8("34692") }, Literal { value: LargeUtf8("85843") }, Literal { value: LargeUtf8("83663") }, Literal { value: LargeUtf8("95421") }, Literal { value: LargeUtf8("19323") }, Literal { value: LargeUtf8("17406") }, Literal { value: LargeUtf8("69264") }, Literal { value: LargeUtf8("28341") }, Literal { value: LargeUtf8("50150") }, Literal { value: LargeUtf8("79121") }, Literal { value: LargeUtf8("73974") }, Literal { value: LargeUtf8("92917") }, Literal { value: LargeUtf8("21229") }, Literal { value: LargeUtf8("32254") }, Literal { value: LargeUtf8("97408") }, Literal { value: LargeUtf8("46011") }, Literal { value: LargeUtf8("37169") }, Literal { value: LargeUtf8("18146") }, Literal { value: LargeUtf8("27296") }, Literal { value: LargeUtf8("62927") }, Literal { value: LargeUtf8("68812") }, Literal { value: LargeUtf8("47734") }, Literal { value: LargeUtf8("86572") }, Literal { value: LargeUtf8("12620") }, Literal { value: LargeUtf8("80252") }, Literal { value: LargeUtf8("50173") }, Literal { value: LargeUtf8("27261") }, Literal { value: LargeUtf8("29534") }, Literal { value: LargeUtf8("23488") }, Literal { value: LargeUtf8("42184") }, Literal { value: LargeUtf8("23695") }, Literal { value: LargeUtf8("45868") }, Literal { value: LargeUtf8("12910") }, Literal { value: LargeUtf8("23429") }, Literal { value: LargeUtf8("29052") }, Literal { value: LargeUtf8("63228") }, Literal { value: LargeUtf8("30731") }, Literal { value: LargeUtf8("15747") }, Literal { value: LargeUtf8("25827") }, Literal { value: LargeUtf8("22332") }, Literal { value: LargeUtf8("62349") }, Literal { value: LargeUtf8("56661") }, Literal { value: LargeUtf8("44652") }, Literal { value: LargeUtf8("51862") }, Literal { value: LargeUtf8("57007") }, Literal { value: LargeUtf8("22773") }, Literal { value: LargeUtf8("40361") }, Literal { value: LargeUtf8("65238") }, Literal { value: LargeUtf8("19327") }, Literal { value: LargeUtf8("17282") }, Literal { value: LargeUtf8("44708") }, Literal { value: LargeUtf8("35484") }, Literal { value: LargeUtf8("34064") }, Literal { value: LargeUtf8("11148") }, Literal { value: LargeUtf8("92729") }, Literal { value: LargeUtf8("22995") }, Literal { value: LargeUtf8("18833") }, Literal { value: LargeUtf8("77528") }, Literal { value: LargeUtf8("48917") }, Literal { value: LargeUtf8("17256") }, Literal { value: LargeUtf8("93166") }, Literal { value: LargeUtf8("68576") }, Literal { value: LargeUtf8("71096") }, Literal { value: LargeUtf8("56499") }, Literal { value: LargeUtf8("35096") }, Literal { value: LargeUtf8("80551") }, Literal { value: LargeUtf8("82424") }, Literal { value: LargeUtf8("17700") }, Literal { value: LargeUtf8("32748") }, Literal { value: LargeUtf8("78969") }, Literal { value: LargeUtf8("46820") }, Literal { value: LargeUtf8("57725") }, Literal { value: LargeUtf8("46179") }, Literal { value: LargeUtf8("54677") }, Literal { value: LargeUtf8("98097") }, Literal { value: LargeUtf8("62869") }, Literal { value: LargeUtf8("83959") }, Literal { value: LargeUtf8("66728") }, Literal { value: LargeUtf8("19716") }, Literal { value: LargeUtf8("48326") }, Literal { value: LargeUtf8("27420") }, Literal { value: LargeUtf8("53458") }, Literal { value: LargeUtf8("69056") }, Literal { value: LargeUtf8("84216") }, Literal { value: LargeUtf8("36688") }, Literal { value: LargeUtf8("63957") }, Literal { value: LargeUtf8("41469") }, Literal { value: LargeUtf8("66843") }, Literal { value: LargeUtf8("18024") }, Literal { value: LargeUtf8("81950") }, Literal { value: LargeUtf8("21911") }, Literal { value: LargeUtf8("58387") }, Literal { value: LargeUtf8("58103") }, Literal { value: LargeUtf8("19813") }, Literal { value: LargeUtf8("34581") }, Literal { value: LargeUtf8("55347") }, Literal { value: LargeUtf8("17171") }, Literal { value: LargeUtf8("35914") }, Literal { value: LargeUtf8("75043") }, Literal { value: LargeUtf8("75088") }, Literal { value: LargeUtf8("80541") }, Literal { value: LargeUtf8("26802") }, Literal { value: LargeUtf8("28849") }, Literal { value: LargeUtf8("22356") }, Literal { value: LargeUtf8("57721") }, Literal { value: LargeUtf8("77084") }, Literal { value: LargeUtf8("46385") }, Literal { value: LargeUtf8("59255") }, Literal { value: LargeUtf8("29308") }, Literal { value: LargeUtf8("65885") }, Literal { value: LargeUtf8("70673") }, Literal { value: LargeUtf8("13306") }, Literal { value: LargeUtf8("68788") }, Literal { value: LargeUtf8("87335") }, Literal { value: LargeUtf8("40987") }, Literal { value: LargeUtf8("31654") }, Literal { value: LargeUtf8("67560") }, Literal { value: LargeUtf8("92309") }, Literal { value: LargeUtf8("78116") }, Literal { value: LargeUtf8("65961") }, Literal { value: LargeUtf8("45018") }, Literal { value: LargeUtf8("16548") }, Literal { value: LargeUtf8("67092") }, Literal { value: LargeUtf8("21818") }, Literal { value: LargeUtf8("33716") }, Literal { value: LargeUtf8("49449") }, Literal { value: LargeUtf8("86150") }, Literal { value: LargeUtf8("12156") }, Literal { value: LargeUtf8("27574") }, Literal { value: LargeUtf8("43201") }, Literal { value: LargeUtf8("50977") }, Literal { value: LargeUtf8("52839") }, Literal { value: LargeUtf8("33234") }, Literal { value: LargeUtf8("86611") }, Literal { value: LargeUtf8("71494") }, Literal { value: LargeUtf8("17823") }, Literal { value: LargeUtf8("57172") }, Literal { value: LargeUtf8("59869") }, Literal { value: LargeUtf8("34086") }, Literal { value: LargeUtf8("51052") }, Literal { value: LargeUtf8("11320") }, Literal { value: LargeUtf8("39717") }, Literal { value: LargeUtf8("79604") }, Literal { value: LargeUtf8("24672") }, Literal { value: LargeUtf8("70555") }, Literal { value: LargeUtf8("38378") }, Literal { value: LargeUtf8("91135") }, Literal { value: LargeUtf8("15567") }, Literal { value: LargeUtf8("21606") }, Literal { value: LargeUtf8("74994") }, Literal { value: LargeUtf8("77168") }, Literal { value: LargeUtf8("38607") }, Literal { value: LargeUtf8("27384") }, Literal { value: LargeUtf8("68328") }, Literal { value: LargeUtf8("88944") }, Literal { value: LargeUtf8("40203") }, Literal { value: LargeUtf8("37893") }, Literal { value: LargeUtf8("42726") }, Literal { value: LargeUtf8("83549") }, Literal { value: LargeUtf8("48739") }, Literal { value: LargeUtf8("55652") }, Literal { value: LargeUtf8("27543") }, Literal { value: LargeUtf8("23109") }, Literal { value: LargeUtf8("98908") }, Literal { value: LargeUtf8("28831") }, Literal { value: LargeUtf8("45011") }, Literal { value: LargeUtf8("47525") }, Literal { value: LargeUtf8("43870") }, Literal { value: LargeUtf8("79404") }, Literal { value: LargeUtf8("35780") }, Literal { value: LargeUtf8("42136") }, Literal { value: LargeUtf8("49317") }, Literal { value: LargeUtf8("14574") }, Literal { value: LargeUtf8("99586") }, Literal { value: LargeUtf8("21107") }, Literal { value: LargeUtf8("14302") }, Literal { value: LargeUtf8("83882") }, Literal { value: LargeUtf8("81272") }, Literal { value: LargeUtf8("92552") }, Literal { value: LargeUtf8("14916") }, Literal { value: LargeUtf8("87533") }, Literal { value: LargeUtf8("86518") }, Literal { value: LargeUtf8("17862") }, Literal { value: LargeUtf8("30741") }, Literal { value: LargeUtf8("96288") }, Literal { value: LargeUtf8("57886") }, Literal { value: LargeUtf8("30304") }, Literal { value: LargeUtf8("24201") }, Literal { value: LargeUtf8("79457") }, Literal { value: LargeUtf8("36728") }, Literal { value: LargeUtf8("49833") }, Literal { value: LargeUtf8("35182") }, Literal { value: LargeUtf8("20108") }, Literal { value: LargeUtf8("39858") }, Literal { value: LargeUtf8("10804") }, Literal { value: LargeUtf8("47042") }, Literal { value: LargeUtf8("20439") }, Literal { value: LargeUtf8("54708") }, Literal { value: LargeUtf8("59027") }, Literal { value: LargeUtf8("82499") }, Literal { value: LargeUtf8("75311") }, Literal { value: LargeUtf8("26548") }, Literal { value: LargeUtf8("53406") }, Literal { value: LargeUtf8("92060") }, Literal { value: LargeUtf8("41152") }, Literal { value: LargeUtf8("60446") }, Literal { value: LargeUtf8("33129") }, Literal { value: LargeUtf8("43979") }, Literal { value: LargeUtf8("16903") }, Literal { value: LargeUtf8("60319") }, Literal { value: LargeUtf8("35550") }, Literal { value: LargeUtf8("33887") }, Literal { value: LargeUtf8("25463") }, Literal { value: LargeUtf8("40343") }, Literal { value: LargeUtf8("20726") }, Literal { value: LargeUtf8("44429") }]) | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_zip@0], 24), input_partitions=24 | +| | ProjectionExec: expr=[substr(ca_zip@0, 1, 5) as ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | FilterExec: count(*)@1 > 10, projection=[ca_zip@0] | +| | AggregateExec: mode=FinalPartitioned, gby=[ca_zip@0 as ca_zip], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_zip@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ca_zip@0 as ca_zip], aggr=[count(*)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ca_address_sk@0, c_current_addr_sk@0)], projection=[ca_zip@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk, ca_zip] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_current_addr_sk], predicate=c_preferred_cust_flag@10 = Y, pruning_predicate=c_preferred_cust_flag_null_count@2 != c_preferred_cust_flag_row_count@3 AND c_preferred_cust_flag_min@0 <= Y AND Y <= c_preferred_cust_flag_max@1, required_guarantees=[N] | +| | | ++---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q90_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q90_explain.snap new file mode 100644 index 0000000000..dcc8c3c02d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q90_explain.snap @@ -0,0 +1,117 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q90" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: am_pm_ratio ASC NULLS LAST, fetch=100 | +| | Projection: CAST(at.amc AS Decimal128(15, 4)) / CAST(pt.pmc AS Decimal128(15, 4)) AS am_pm_ratio | +| | Cross Join: | +| | SubqueryAlias: at | +| | Projection: count(*) AS amc | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk | +| | Projection: web_sales.ws_web_page_sk | +| | Inner Join: web_sales.ws_sold_time_sk = time_dim.t_time_sk | +| | Projection: web_sales.ws_sold_time_sk, web_sales.ws_web_page_sk | +| | Inner Join: web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour >= Int32(9), time_dim.t_hour <= Int32(10)] | +| | BytesProcessedNode | +| | TableScan: web_page projection=[wp_web_page_sk], full_filters=[web_page.wp_char_count >= Int32(2500), web_page.wp_char_count <= Int32(5200)] | +| | SubqueryAlias: pt | +| | Projection: count(*) AS pmc | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: web_sales.ws_web_page_sk = web_page.wp_web_page_sk | +| | Projection: web_sales.ws_web_page_sk | +| | Inner Join: web_sales.ws_sold_time_sk = time_dim.t_time_sk | +| | Projection: web_sales.ws_sold_time_sk, web_sales.ws_web_page_sk | +| | Inner Join: web_sales.ws_ship_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(2)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour >= Int32(15), time_dim.t_hour <= Int32(16)] | +| | BytesProcessedNode | +| | TableScan: web_page projection=[wp_web_page_sk], full_filters=[web_page.wp_char_count >= Int32(2500), web_page.wp_char_count <= Int32(5200)] | +| physical_plan | SortExec: TopK(fetch=100), expr=[am_pm_ratio@0 ASC NULLS LAST], preserve_partitioning=[false] | +| | ProjectionExec: expr=[CAST(amc@0 AS Decimal128(15, 4)) / CAST(pmc@1 AS Decimal128(15, 4)) as am_pm_ratio] | +| | CrossJoinExec | +| | ProjectionExec: expr=[count(*)@0 as amc] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_page_sk@0, wp_web_page_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_page_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_time_sk@0, t_time_sk@0)], projection=[ws_web_page_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_hdemo_sk@1, hd_demo_sk@0)], projection=[ws_sold_time_sk@0, ws_web_page_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 >= 9 AND t_hour@3 <= 10, pruning_predicate=t_hour_null_count@1 != t_hour_row_count@2 AND t_hour_max@0 >= 9 AND t_hour_null_count@1 != t_hour_row_count@2 AND t_hour_min@3 <= 10, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wp_web_page_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_page/web_page.parquet]]}, projection=[wp_web_page_sk], predicate=wp_char_count@10 >= 2500 AND wp_char_count@10 <= 5200, pruning_predicate=wp_char_count_null_count@1 != wp_char_count_row_count@2 AND wp_char_count_max@0 >= 2500 AND wp_char_count_null_count@1 != wp_char_count_row_count@2 AND wp_char_count_min@3 <= 5200, required_guarantees=[N] | +| | ProjectionExec: expr=[count(*)@0 as pmc] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_page_sk@0, wp_web_page_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_page_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_time_sk@0, t_time_sk@0)], projection=[ws_web_page_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_hdemo_sk@1, hd_demo_sk@0)], projection=[ws_sold_time_sk@0, ws_web_page_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_time_sk, ws_ship_hdemo_sk, ws_web_page_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 2, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 2 AND 2 <= hd_dep_count_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 >= 15 AND t_hour@3 <= 16, pruning_predicate=t_hour_null_count@1 != t_hour_row_count@2 AND t_hour_max@0 >= 15 AND t_hour_null_count@1 != t_hour_row_count@2 AND t_hour_min@3 <= 16, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wp_web_page_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_page/web_page.parquet]]}, projection=[wp_web_page_sk], predicate=wp_char_count@10 >= 2500 AND wp_char_count@10 <= 5200, pruning_predicate=wp_char_count_null_count@1 != wp_char_count_row_count@2 AND wp_char_count_max@0 >= 2500 AND wp_char_count_null_count@1 != wp_char_count_row_count@2 AND wp_char_count_min@3 <= 5200, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q91_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q91_explain.snap new file mode 100644 index 0000000000..0b030ee826 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q91_explain.snap @@ -0,0 +1,103 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q91" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: Call_Center, Call_Center_Name, Manager, Returns_Loss | +| | Sort: sum(catalog_returns.cr_net_loss) AS Returns_Loss DESC NULLS FIRST | +| | Projection: call_center.cc_call_center_id AS Call_Center, call_center.cc_name AS Call_Center_Name, call_center.cc_manager AS Manager, sum(catalog_returns.cr_net_loss) AS Returns_Loss, sum(catalog_returns.cr_net_loss) | +| | Aggregate: groupBy=[[call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, customer_demographics.cd_marital_status, customer_demographics.cd_education_status]], aggr=[[sum(catalog_returns.cr_net_loss)]] | +| | Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer_demographics.cd_marital_status, customer_demographics.cd_education_status | +| | Inner Join: customer.c_current_hdemo_sk = household_demographics.hd_demo_sk | +| | Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer.c_current_hdemo_sk, customer_demographics.cd_marital_status, customer_demographics.cd_education_status | +| | Inner Join: customer.c_current_cdemo_sk = customer_demographics.cd_demo_sk | +| | Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk | +| | Inner Join: customer.c_current_addr_sk = customer_address.ca_address_sk | +| | Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_net_loss, customer.c_current_cdemo_sk, customer.c_current_hdemo_sk, customer.c_current_addr_sk | +| | Inner Join: catalog_returns.cr_returning_customer_sk = customer.c_customer_sk | +| | Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_returning_customer_sk, catalog_returns.cr_net_loss | +| | Inner Join: catalog_returns.cr_returned_date_sk = date_dim.d_date_sk | +| | Projection: call_center.cc_call_center_id, call_center.cc_name, call_center.cc_manager, catalog_returns.cr_returned_date_sk, catalog_returns.cr_returning_customer_sk, catalog_returns.cr_net_loss | +| | Inner Join: call_center.cc_call_center_sk = catalog_returns.cr_call_center_sk | +| | BytesProcessedNode | +| | TableScan: call_center projection=[cc_call_center_sk, cc_call_center_id, cc_name, cc_manager] | +| | BytesProcessedNode | +| | TableScan: catalog_returns projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_call_center_sk, cr_net_loss] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_year = Int32(2002), date_dim.d_moy = Int32(11)] | +| | BytesProcessedNode | +| | TableScan: customer projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_gmt_offset = Decimal128(Some(-600),5,2)] | +| | BytesProcessedNode | +| | TableScan: customer_demographics projection=[cd_demo_sk, cd_marital_status, cd_education_status], full_filters=[customer_demographics.cd_marital_status = LargeUtf8("M") AND customer_demographics.cd_education_status = LargeUtf8("Unknown") OR customer_demographics.cd_marital_status = LargeUtf8("W") AND customer_demographics.cd_education_status = LargeUtf8("Advanced Degree")] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_buy_potential LIKE LargeUtf8("Unknown%")] | +| physical_plan | ProjectionExec: expr=[Call_Center@0 as Call_Center, Call_Center_Name@1 as Call_Center_Name, Manager@2 as Manager, Returns_Loss@3 as Returns_Loss] | +| | SortPreservingMergeExec: [sum(catalog_returns.cr_net_loss)@4 DESC] | +| | SortExec: expr=[sum(catalog_returns.cr_net_loss)@4 DESC], preserve_partitioning=[true] | +| | ProjectionExec: expr=[cc_call_center_id@0 as Call_Center, cc_name@1 as Call_Center_Name, cc_manager@2 as Manager, sum(catalog_returns.cr_net_loss)@5 as Returns_Loss, sum(catalog_returns.cr_net_loss)@5 as sum(catalog_returns.cr_net_loss)] | +| | AggregateExec: mode=FinalPartitioned, gby=[cc_call_center_id@0 as cc_call_center_id, cc_name@1 as cc_name, cc_manager@2 as cc_manager, cd_marital_status@3 as cd_marital_status, cd_education_status@4 as cd_education_status], aggr=[sum(catalog_returns.cr_net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cc_call_center_id@0, cc_name@1, cc_manager@2, cd_marital_status@3, cd_education_status@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cc_call_center_id@0 as cc_call_center_id, cc_name@1 as cc_name, cc_manager@2 as cc_manager, cd_marital_status@4 as cd_marital_status, cd_education_status@5 as cd_education_status], aggr=[sum(catalog_returns.cr_net_loss)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_hdemo_sk@4, hd_demo_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@3, cd_marital_status@5, cd_education_status@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_hdemo_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_cdemo_sk@4, cd_demo_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@3, c_current_hdemo_sk@5, cd_marital_status@7, cd_education_status@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_cdemo_sk@4], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(c_current_addr_sk@6, ca_address_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@3, c_current_cdemo_sk@4, c_current_hdemo_sk@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_current_addr_sk@6], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returning_customer_sk@3, c_customer_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_net_loss@4, c_current_cdemo_sk@6, c_current_hdemo_sk@7, c_current_addr_sk@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returning_customer_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cr_returned_date_sk@3, d_date_sk@0)], projection=[cc_call_center_id@0, cc_name@1, cc_manager@2, cr_returning_customer_sk@4, cr_net_loss@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_returned_date_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cc_call_center_sk@0, cr_call_center_sk@2)], projection=[cc_call_center_id@1, cc_name@2, cc_manager@3, cr_returned_date_sk@4, cr_returning_customer_sk@5, cr_net_loss@7] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cc_call_center_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/call_center/call_center.parquet]]}, projection=[cc_call_center_sk, cc_call_center_id, cc_name, cc_manager] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cr_call_center_sk@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_returns/catalog_returns.parquet:0..517810], [tpcds_sf1/catalog_returns/catalog_returns.parquet:517810..1035620], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1035620..1553430], [tpcds_sf1/catalog_returns/catalog_returns.parquet:1553430..2071240], [tpcds_sf1/catalog_returns/catalog_returns.parquet:2071240..2589050], ...]}, projection=[cr_returned_date_sk, cr_returning_customer_sk, cr_call_center_sk, cr_net_loss] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_year@6 = 2002 AND d_moy@8 = 11, pruning_predicate=d_year_null_count@2 != d_year_row_count@3 AND d_year_min@0 <= 2002 AND 2002 <= d_year_max@1 AND d_moy_null_count@6 != d_moy_row_count@7 AND d_moy_min@4 <= 11 AND 11 <= d_moy_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([c_customer_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer/customer.parquet]]}, projection=[c_customer_sk, c_current_cdemo_sk, c_current_hdemo_sk, c_current_addr_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_gmt_offset@11 = Some(-600),5,2, pruning_predicate=ca_gmt_offset_null_count@2 != ca_gmt_offset_row_count@3 AND ca_gmt_offset_min@0 <= Some(-600),5,2 AND Some(-600),5,2 <= ca_gmt_offset_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_demographics/customer_demographics.parquet]]}, projection=[cd_demo_sk, cd_marital_status, cd_education_status], predicate=cd_marital_status@2 = M AND cd_education_status@3 = Unknown OR cd_marital_status@2 = W AND cd_education_status@3 = Advanced Degree, pruning_predicate=cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= M AND M <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Unknown AND Unknown <= cd_education_status_max@5 OR cd_marital_status_null_count@2 != cd_marital_status_row_count@3 AND cd_marital_status_min@0 <= W AND W <= cd_marital_status_max@1 AND cd_education_status_null_count@6 != cd_education_status_row_count@7 AND cd_education_status_min@4 <= Advanced Degree AND Advanced Degree <= cd_education_status_max@5, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_buy_potential@2 LIKE Unknown%, pruning_predicate=hd_buy_potential_null_count@2 != hd_buy_potential_row_count@3 AND hd_buy_potential_min@0 <= Unknowo AND Unknown <= hd_buy_potential_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q92_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q92_explain.snap new file mode 100644 index 0000000000..858fa133f4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q92_explain.snap @@ -0,0 +1,80 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q92" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: Excess Discount Amount | +| | Sort: sum(web_sales.ws_ext_discount_amt) AS Excess Discount Amount ASC NULLS LAST, fetch=100 | +| | Projection: sum(web_sales.ws_ext_discount_amt) AS Excess Discount Amount, sum(web_sales.ws_ext_discount_amt) | +| | Aggregate: groupBy=[[]], aggr=[[sum(web_sales.ws_ext_discount_amt)]] | +| | Projection: web_sales.ws_ext_discount_amt | +| | Inner Join: item.i_item_sk = __scalar_sq_1.ws_item_sk Filter: CAST(web_sales.ws_ext_discount_amt AS Decimal128(30, 15)) > __scalar_sq_1.Float64(1.3) * avg(web_sales.ws_ext_discount_amt) | +| | Projection: web_sales.ws_ext_discount_amt, item.i_item_sk | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | Projection: web_sales.ws_sold_date_sk, web_sales.ws_ext_discount_amt, item.i_item_sk | +| | Inner Join: web_sales.ws_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk], full_filters=[item.i_manufact_id = Int32(914)] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-01-25"), date_dim.d_date <= Date32("2001-04-25")] | +| | SubqueryAlias: __scalar_sq_1 | +| | Projection: CAST(Float64(1.3) * CAST(avg(web_sales.ws_ext_discount_amt) AS Float64) AS Decimal128(30, 15)), web_sales.ws_item_sk | +| | Aggregate: groupBy=[[web_sales.ws_item_sk]], aggr=[[avg(web_sales.ws_ext_discount_amt)]] | +| | Projection: web_sales.ws_item_sk, web_sales.ws_ext_discount_amt | +| | Inner Join: web_sales.ws_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2001-01-25"), date_dim.d_date <= Date32("2001-04-25")] | +| physical_plan | ProjectionExec: expr=[Excess Discount Amount@0 as Excess Discount Amount] | +| | ProjectionExec: expr=[sum(web_sales.ws_ext_discount_amt)@0 as Excess Discount Amount, sum(web_sales.ws_ext_discount_amt)@0 as sum(web_sales.ws_ext_discount_amt)] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(web_sales.ws_ext_discount_amt)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(i_item_sk@1, ws_item_sk@1)], filter=CAST(ws_ext_discount_amt@0 AS Decimal128(30, 15)) > Float64(1.3) * avg(web_sales.ws_ext_discount_amt)@1, projection=[ws_ext_discount_amt@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_ext_discount_amt@1, i_item_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_item_sk@1, i_item_sk@0)], projection=[ws_sold_date_sk@0, ws_ext_discount_amt@2, i_item_sk@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk], predicate=i_manufact_id@13 = 914, pruning_predicate=i_manufact_id_null_count@2 != i_manufact_id_row_count@3 AND i_manufact_id_min@0 <= 914 AND 914 <= i_manufact_id_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-01-25 AND d_date@2 <= 2001-04-25, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-01-25 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-04-25, required_guarantees=[N] | +| | ProjectionExec: expr=[CAST(1.3 * CAST(avg(web_sales.ws_ext_discount_amt)@1 AS Float64) AS Decimal128(30, 15)) as Float64(1.3) * avg(web_sales.ws_ext_discount_amt), ws_item_sk@0 as ws_item_sk] | +| | AggregateExec: mode=FinalPartitioned, gby=[ws_item_sk@0 as ws_item_sk], aggr=[avg(web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_item_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ws_item_sk@0 as ws_item_sk], aggr=[avg(web_sales.ws_ext_discount_amt)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_sold_date_sk@0, d_date_sk@0)], projection=[ws_item_sk@1, ws_ext_discount_amt@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_sold_date_sk, ws_item_sk, ws_ext_discount_amt] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2001-01-25 AND d_date@2 <= 2001-04-25, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2001-01-25 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2001-04-25, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q93_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q93_explain.snap new file mode 100644 index 0000000000..30b81bd4c4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q93_explain.snap @@ -0,0 +1,50 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q93" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: sumsales ASC NULLS LAST, t.ss_customer_sk ASC NULLS LAST, fetch=100 | +| | Projection: t.ss_customer_sk, sum(t.act_sales) AS sumsales | +| | Aggregate: groupBy=[[t.ss_customer_sk]], aggr=[[sum(t.act_sales)]] | +| | SubqueryAlias: t | +| | Projection: store_sales.ss_customer_sk, CASE WHEN store_returns.sr_return_quantity IS NOT NULL THEN CAST(store_sales.ss_quantity - store_returns.sr_return_quantity AS Decimal128(10, 0)) * store_sales.ss_sales_price ELSE CAST(store_sales.ss_quantity AS Decimal128(10, 0)) * store_sales.ss_sales_price END AS act_sales | +| | Inner Join: store_returns.sr_reason_sk = reason.r_reason_sk | +| | Projection: store_sales.ss_customer_sk, store_sales.ss_quantity, store_sales.ss_sales_price, store_returns.sr_reason_sk, store_returns.sr_return_quantity | +| | Left Join: store_sales.ss_item_sk = store_returns.sr_item_sk, store_sales.ss_ticket_number = store_returns.sr_ticket_number | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_sales_price] | +| | BytesProcessedNode | +| | TableScan: store_returns projection=[sr_item_sk, sr_reason_sk, sr_ticket_number, sr_return_quantity] | +| | BytesProcessedNode | +| | TableScan: reason projection=[r_reason_sk], full_filters=[reason.r_reason_desc = LargeUtf8("Did not get it on time")] | +| physical_plan | SortPreservingMergeExec: [sumsales@1 ASC NULLS LAST, ss_customer_sk@0 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[sumsales@1 ASC NULLS LAST, ss_customer_sk@0 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[ss_customer_sk@0 as ss_customer_sk, sum(t.act_sales)@1 as sumsales] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_customer_sk@0 as ss_customer_sk], aggr=[sum(t.act_sales)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_customer_sk@0 as ss_customer_sk], aggr=[sum(t.act_sales)] | +| | ProjectionExec: expr=[ss_customer_sk@0 as ss_customer_sk, CASE WHEN sr_return_quantity@3 IS NOT NULL THEN CAST(ss_quantity@1 - sr_return_quantity@3 AS Decimal128(10, 0)) * ss_sales_price@2 ELSE CAST(ss_quantity@1 AS Decimal128(10, 0)) * ss_sales_price@2 END as act_sales] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(sr_reason_sk@3, r_reason_sk@0)], projection=[ss_customer_sk@0, ss_quantity@1, ss_sales_price@2, sr_return_quantity@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_reason_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Left, on=[(ss_item_sk@0, sr_item_sk@0), (ss_ticket_number@2, sr_ticket_number@2)], projection=[ss_customer_sk@1, ss_quantity@3, ss_sales_price@4, sr_reason_sk@6, sr_return_quantity@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@0, ss_ticket_number@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_item_sk, ss_customer_sk, ss_ticket_number, ss_quantity, ss_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sr_item_sk@0, sr_ticket_number@2], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_returns/store_returns.parquet:0..813719], [tpcds_sf1/store_returns/store_returns.parquet:813719..1627438], [tpcds_sf1/store_returns/store_returns.parquet:1627438..2441157], [tpcds_sf1/store_returns/store_returns.parquet:2441157..3254876], [tpcds_sf1/store_returns/store_returns.parquet:3254876..4068595], ...]}, projection=[sr_item_sk, sr_reason_sk, sr_ticket_number, sr_return_quantity] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([r_reason_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/reason/reason.parquet]]}, projection=[r_reason_sk], predicate=r_reason_desc@2 = Did not get it on time, pruning_predicate=r_reason_desc_null_count@2 != r_reason_desc_row_count@3 AND r_reason_desc_min@0 <= Did not get it on time AND Did not get it on time <= r_reason_desc_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q94_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q94_explain.snap new file mode 100644 index 0000000000..4bda2cde1f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q94_explain.snap @@ -0,0 +1,92 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q94" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: order count, total shipping cost, total net profit | +| | Sort: count(DISTINCT ws1.ws_order_number) AS order count ASC NULLS LAST, fetch=100 | +| | Projection: count(DISTINCT ws1.ws_order_number) AS order count, sum(ws1.ws_ext_ship_cost) AS total shipping cost, sum(ws1.ws_net_profit) AS total net profit, count(DISTINCT ws1.ws_order_number) | +| | Projection: count(alias1) AS count(DISTINCT ws1.ws_order_number), sum(alias2) AS sum(ws1.ws_ext_ship_cost), sum(alias3) AS sum(ws1.ws_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[count(alias1), sum(alias2), sum(alias3)]] | +| | Aggregate: groupBy=[[ws1.ws_order_number AS alias1]], aggr=[[sum(ws1.ws_ext_ship_cost) AS alias2, sum(ws1.ws_net_profit) AS alias3]] | +| | LeftAnti Join: ws1.ws_order_number = __correlated_sq_2.wr_order_number | +| | Projection: ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit | +| | LeftSemi Join: ws1.ws_order_number = __correlated_sq_1.ws_order_number Filter: ws1.ws_warehouse_sk != __correlated_sq_1.ws_warehouse_sk | +| | Projection: ws1.ws_warehouse_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit | +| | Inner Join: ws1.ws_web_site_sk = web_site.web_site_sk | +| | Projection: ws1.ws_web_site_sk, ws1.ws_warehouse_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit | +| | Inner Join: ws1.ws_ship_addr_sk = customer_address.ca_address_sk | +| | Projection: ws1.ws_ship_addr_sk, ws1.ws_web_site_sk, ws1.ws_warehouse_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit | +| | Inner Join: ws1.ws_ship_date_sk = date_dim.d_date_sk | +| | SubqueryAlias: ws1 | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_warehouse_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("1999-04-01"), date_dim.d_date <= Date32("1999-05-31")] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = LargeUtf8("WI")] | +| | BytesProcessedNode | +| | TableScan: web_site projection=[web_site_sk], full_filters=[web_site.web_company_name = LargeUtf8("pri")] | +| | SubqueryAlias: __correlated_sq_1 | +| | SubqueryAlias: ws2 | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] | +| | SubqueryAlias: __correlated_sq_2 | +| | SubqueryAlias: wr1 | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_order_number] | +| physical_plan | ProjectionExec: expr=[order count@0 as order count, total shipping cost@1 as total shipping cost, total net profit@2 as total net profit] | +| | ProjectionExec: expr=[count(alias1)@0 as order count, sum(alias2)@1 as total shipping cost, sum(alias3)@2 as total net profit, count(alias1)@0 as count(DISTINCT ws1.ws_order_number)] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] | +| | AggregateExec: mode=SinglePartitioned, gby=[ws_order_number@0 as alias1], aggr=[alias2, alias3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftAnti, on=[(ws_order_number@0, wr_order_number@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ws_order_number@1, ws_order_number@1)], filter=ws_warehouse_sk@0 != ws_warehouse_sk@1, projection=[ws_order_number@1, ws_ext_ship_cost@2, ws_net_profit@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_site_sk@0, web_site_sk@0)], projection=[ws_warehouse_sk@1, ws_order_number@2, ws_ext_ship_cost@3, ws_net_profit@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_site_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_addr_sk@0, ca_address_sk@0)], projection=[ws_web_site_sk@1, ws_warehouse_sk@2, ws_order_number@3, ws_ext_ship_cost@4, ws_net_profit@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_date_sk@0, d_date_sk@0)], projection=[ws_ship_addr_sk@1, ws_web_site_sk@2, ws_warehouse_sk@3, ws_order_number@4, ws_ext_ship_cost@5, ws_net_profit@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_warehouse_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 1999-04-01 AND d_date@2 <= 1999-05-31, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 1999-04-01 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 1999-05-31, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_state@8 = WI, pruning_predicate=ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= WI AND WI <= ca_state_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([web_site_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_site/web_site.parquet]]}, projection=[web_site_sk], predicate=web_company_name@14 = pri, pruning_predicate=web_company_name_null_count@2 != web_company_name_row_count@3 AND web_company_name_min@0 <= pri AND pri <= web_company_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_warehouse_sk, ws_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_order_number@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_order_number] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q95_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q95_explain.snap new file mode 100644 index 0000000000..8b43970824 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q95_explain.snap @@ -0,0 +1,125 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q95" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: order count, total shipping cost, total net profit | +| | Sort: count(DISTINCT ws1.ws_order_number) AS order count ASC NULLS LAST, fetch=100 | +| | Projection: count(DISTINCT ws1.ws_order_number) AS order count, sum(ws1.ws_ext_ship_cost) AS total shipping cost, sum(ws1.ws_net_profit) AS total net profit, count(DISTINCT ws1.ws_order_number) | +| | Projection: count(alias1) AS count(DISTINCT ws1.ws_order_number), sum(alias2) AS sum(ws1.ws_ext_ship_cost), sum(alias3) AS sum(ws1.ws_net_profit) | +| | Aggregate: groupBy=[[]], aggr=[[count(alias1), sum(alias2), sum(alias3)]] | +| | Aggregate: groupBy=[[ws1.ws_order_number AS alias1]], aggr=[[sum(ws1.ws_ext_ship_cost) AS alias2, sum(ws1.ws_net_profit) AS alias3]] | +| | LeftSemi Join: ws1.ws_order_number = __correlated_sq_2.wr_order_number | +| | LeftSemi Join: ws1.ws_order_number = __correlated_sq_1.ws_order_number | +| | Projection: ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit | +| | Inner Join: ws1.ws_web_site_sk = web_site.web_site_sk | +| | Projection: ws1.ws_web_site_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit | +| | Inner Join: ws1.ws_ship_addr_sk = customer_address.ca_address_sk | +| | Projection: ws1.ws_ship_addr_sk, ws1.ws_web_site_sk, ws1.ws_order_number, ws1.ws_ext_ship_cost, ws1.ws_net_profit | +| | Inner Join: ws1.ws_ship_date_sk = date_dim.d_date_sk | +| | SubqueryAlias: ws1 | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2002-05-01"), date_dim.d_date <= Date32("2002-06-30")] | +| | BytesProcessedNode | +| | TableScan: customer_address projection=[ca_address_sk], full_filters=[customer_address.ca_state = LargeUtf8("MA")] | +| | BytesProcessedNode | +| | TableScan: web_site projection=[web_site_sk], full_filters=[web_site.web_company_name = LargeUtf8("pri")] | +| | SubqueryAlias: __correlated_sq_1 | +| | SubqueryAlias: ws_wh | +| | Projection: ws1.ws_order_number | +| | Inner Join: ws1.ws_order_number = ws2.ws_order_number Filter: ws2.ws_warehouse_sk != ws1.ws_warehouse_sk | +| | SubqueryAlias: ws1 | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] | +| | SubqueryAlias: ws2 | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] | +| | SubqueryAlias: __correlated_sq_2 | +| | Projection: web_returns.wr_order_number | +| | Inner Join: web_returns.wr_order_number = ws_wh.ws_order_number | +| | BytesProcessedNode | +| | TableScan: web_returns projection=[wr_order_number] | +| | SubqueryAlias: ws_wh | +| | Projection: ws1.ws_order_number | +| | Inner Join: ws1.ws_order_number = ws2.ws_order_number Filter: ws2.ws_warehouse_sk != ws1.ws_warehouse_sk | +| | SubqueryAlias: ws1 | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] | +| | SubqueryAlias: ws2 | +| | BytesProcessedNode | +| | TableScan: web_sales projection=[ws_warehouse_sk, ws_order_number] | +| physical_plan | ProjectionExec: expr=[order count@0 as order count, total shipping cost@1 as total shipping cost, total net profit@2 as total net profit] | +| | ProjectionExec: expr=[count(alias1)@0 as order count, sum(alias2)@1 as total shipping cost, sum(alias3)@2 as total net profit, count(alias1)@0 as count(DISTINCT ws1.ws_order_number)] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(alias1), sum(alias2), sum(alias3)] | +| | AggregateExec: mode=SinglePartitioned, gby=[ws_order_number@0 as alias1], aggr=[alias2, alias3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ws_order_number@0, wr_order_number@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=LeftSemi, on=[(ws_order_number@0, ws_order_number@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_web_site_sk@0, web_site_sk@0)], projection=[ws_order_number@1, ws_ext_ship_cost@2, ws_net_profit@3] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_web_site_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_addr_sk@0, ca_address_sk@0)], projection=[ws_web_site_sk@1, ws_order_number@2, ws_ext_ship_cost@3, ws_net_profit@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_addr_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_ship_date_sk@0, d_date_sk@0)], projection=[ws_ship_addr_sk@1, ws_web_site_sk@2, ws_order_number@3, ws_ext_ship_cost@4, ws_net_profit@5] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_ship_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_ship_date_sk, ws_ship_addr_sk, ws_web_site_sk, ws_order_number, ws_ext_ship_cost, ws_net_profit] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2002-05-01 AND d_date@2 <= 2002-06-30, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2002-05-01 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2002-06-30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ca_address_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/customer_address/customer_address.parquet]]}, projection=[ca_address_sk], predicate=ca_state@8 = MA, pruning_predicate=ca_state_null_count@2 != ca_state_row_count@3 AND ca_state_min@0 <= MA AND MA <= ca_state_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([web_site_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_site/web_site.parquet]]}, projection=[web_site_sk], predicate=web_company_name@14 = pri, pruning_predicate=web_company_name_null_count@2 != web_company_name_row_count@3 AND web_company_name_min@0 <= pri AND pri <= web_company_name_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_order_number@1, ws_order_number@1)], filter=ws_warehouse_sk@1 != ws_warehouse_sk@0, projection=[ws_order_number@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_warehouse_sk, ws_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_warehouse_sk, ws_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(wr_order_number@0, ws_order_number@0)], projection=[wr_order_number@0] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([wr_order_number@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/web_returns/web_returns.parquet]]}, projection=[wr_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ws_order_number@1, ws_order_number@1)], filter=ws_warehouse_sk@1 != ws_warehouse_sk@0, projection=[ws_order_number@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_warehouse_sk, ws_order_number] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ws_order_number@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/web_sales/web_sales.parquet:0..2426422], [tpcds_sf1/web_sales/web_sales.parquet:2426422..4852844], [tpcds_sf1/web_sales/web_sales.parquet:4852844..7279266], [tpcds_sf1/web_sales/web_sales.parquet:7279266..9705688], [tpcds_sf1/web_sales/web_sales.parquet:9705688..12132110], ...]}, projection=[ws_warehouse_sk, ws_order_number] | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q96_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q96_explain.snap new file mode 100644 index 0000000000..42feae45b2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q96_explain.snap @@ -0,0 +1,59 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q96" +--- ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: count(*) ASC NULLS LAST, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | Projection: | +| | Inner Join: store_sales.ss_store_sk = store.s_store_sk | +| | Projection: store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_sold_time_sk = time_dim.t_time_sk | +| | Projection: store_sales.ss_sold_time_sk, store_sales.ss_store_sk | +| | Inner Join: store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | BytesProcessedNode | +| | TableScan: household_demographics projection=[hd_demo_sk], full_filters=[household_demographics.hd_dep_count = Int32(5)] | +| | BytesProcessedNode | +| | TableScan: time_dim projection=[t_time_sk], full_filters=[time_dim.t_hour = Int32(8), time_dim.t_minute >= Int32(30)] | +| | BytesProcessedNode | +| | TableScan: store projection=[s_store_sk], full_filters=[store.s_store_name = LargeUtf8("ese")] | +| physical_plan | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | ProjectionExec: expr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_store_sk@0, s_store_sk@0)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_store_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_time_sk@0, t_time_sk@0)], projection=[ss_store_sk@1] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_time_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_hdemo_sk@1, hd_demo_sk@0)], projection=[ss_sold_time_sk@0, ss_store_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_hdemo_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_time_sk, ss_hdemo_sk, ss_store_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([hd_demo_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/household_demographics/household_demographics.parquet]]}, projection=[hd_demo_sk], predicate=hd_dep_count@3 = 5, pruning_predicate=hd_dep_count_null_count@2 != hd_dep_count_row_count@3 AND hd_dep_count_min@0 <= 5 AND 5 <= hd_dep_count_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([t_time_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/time_dim/time_dim.parquet]]}, projection=[t_time_sk], predicate=t_hour@3 = 8 AND t_minute@4 >= 30, pruning_predicate=t_hour_null_count@2 != t_hour_row_count@3 AND t_hour_min@0 <= 8 AND 8 <= t_hour_max@1 AND t_minute_null_count@5 != t_minute_row_count@6 AND t_minute_max@4 >= 30, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([s_store_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/store/store.parquet]]}, projection=[s_store_sk], predicate=s_store_name@5 = ese, pruning_predicate=s_store_name_null_count@2 != s_store_name_row_count@3 AND s_store_name_min@0 <= ese AND ese <= s_store_name_max@1, required_guarantees=[N] | +| | | ++---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q97_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q97_explain.snap new file mode 100644 index 0000000000..36bd3aaf76 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q97_explain.snap @@ -0,0 +1,72 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q97" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END) AS store_only, sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS catalog_only, sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END) AS store_and_catalog | +| | Limit: skip=0, fetch=100 | +| | Aggregate: groupBy=[[]], aggr=[[sum(CASE WHEN __common_expr_1 AS ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 AS ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)]] | +| | Projection: ssci.customer_sk IS NOT NULL AS __common_expr_1, ssci.customer_sk, csci.customer_sk | +| | Full Join: ssci.customer_sk = csci.customer_sk, ssci.item_sk = csci.item_sk | +| | SubqueryAlias: ssci | +| | Projection: store_sales.ss_customer_sk AS customer_sk, store_sales.ss_item_sk AS item_sk | +| | Aggregate: groupBy=[[store_sales.ss_customer_sk, store_sales.ss_item_sk]], aggr=[[]] | +| | Projection: store_sales.ss_item_sk, store_sales.ss_customer_sk | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1211), date_dim.d_month_seq <= Int32(1222)] | +| | SubqueryAlias: csci | +| | Projection: catalog_sales.cs_bill_customer_sk AS customer_sk, catalog_sales.cs_item_sk AS item_sk | +| | Aggregate: groupBy=[[catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk]], aggr=[[]] | +| | Projection: catalog_sales.cs_bill_customer_sk, catalog_sales.cs_item_sk | +| | Inner Join: catalog_sales.cs_sold_date_sk = date_dim.d_date_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1211), date_dim.d_month_seq <= Int32(1222)] | +| physical_plan | ProjectionExec: expr=[sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END)@0 as store_only, sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)@1 as catalog_only, sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)@2 as store_and_catalog] | +| | GlobalLimitExec: skip=0, fetch=100 | +| | AggregateExec: mode=Final, gby=[], aggr=[sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN ssci.customer_sk IS NOT NULL AND csci.customer_sk IS NOT NULL THEN Int64(1) ELSE Int64(0) END)] | +| | ProjectionExec: expr=[customer_sk@0 IS NOT NULL as __common_expr_1, customer_sk@0 as customer_sk, customer_sk@1 as customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Full, on=[(customer_sk@0, customer_sk@0), (item_sk@1, item_sk@1)], projection=[customer_sk@0, customer_sk@2] | +| | ProjectionExec: expr=[ss_customer_sk@0 as customer_sk, ss_item_sk@1 as item_sk] | +| | AggregateExec: mode=FinalPartitioned, gby=[ss_customer_sk@0 as ss_customer_sk, ss_item_sk@1 as ss_item_sk], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_customer_sk@0, ss_item_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[ss_customer_sk@1 as ss_customer_sk, ss_item_sk@0 as ss_item_sk], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_item_sk@1, ss_customer_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_customer_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1211 AND d_month_seq@3 <= 1222, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1211 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1222, required_guarantees=[N] | +| | ProjectionExec: expr=[cs_bill_customer_sk@0 as customer_sk, cs_item_sk@1 as item_sk] | +| | AggregateExec: mode=FinalPartitioned, gby=[cs_bill_customer_sk@0 as cs_bill_customer_sk, cs_item_sk@1 as cs_item_sk], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_bill_customer_sk@0, cs_item_sk@1], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[cs_bill_customer_sk@0 as cs_bill_customer_sk, cs_item_sk@1 as cs_item_sk], aggr=[] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_sold_date_sk@0, d_date_sk@0)], projection=[cs_bill_customer_sk@1, cs_item_sk@2] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_sold_date_sk@0], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_bill_customer_sk, cs_item_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1211 AND d_month_seq@3 <= 1222, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1211 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1222, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q98_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q98_explain.snap new file mode 100644 index 0000000000..01f4924cc0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q98_explain.snap @@ -0,0 +1,54 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q98" +--- ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: item.i_category ASC NULLS LAST, item.i_class ASC NULLS LAST, item.i_item_id ASC NULLS LAST, item.i_item_desc ASC NULLS LAST, revenueratio ASC NULLS LAST | +| | Projection: item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price, sum(store_sales.ss_ext_sales_price) AS itemrevenue, sum(store_sales.ss_ext_sales_price) * Decimal128(Some(100),20,0) / sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING AS revenueratio | +| | WindowAggr: windowExpr=[[sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | +| | Aggregate: groupBy=[[item.i_item_id, item.i_item_desc, item.i_category, item.i_class, item.i_current_price]], aggr=[[sum(store_sales.ss_ext_sales_price)]] | +| | Projection: store_sales.ss_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category | +| | Inner Join: store_sales.ss_sold_date_sk = date_dim.d_date_sk | +| | Projection: store_sales.ss_sold_date_sk, store_sales.ss_ext_sales_price, item.i_item_id, item.i_item_desc, item.i_current_price, item.i_class, item.i_category | +| | Inner Join: store_sales.ss_item_sk = item.i_item_sk | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | BytesProcessedNode | +| | TableScan: item projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], full_filters=[item.i_category = LargeUtf8("Shoes") OR item.i_category = LargeUtf8("Music") OR item.i_category = LargeUtf8("Men")] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_date >= Date32("2000-01-05"), date_dim.d_date <= Date32("2000-02-04")] | +| physical_plan | SortPreservingMergeExec: [i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST] | +| | SortExec: expr=[i_category@2 ASC NULLS LAST, i_class@3 ASC NULLS LAST, i_item_id@0 ASC NULLS LAST, i_item_desc@1 ASC NULLS LAST, revenueratio@6 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price, sum(store_sales.ss_ext_sales_price)@5 as itemrevenue, sum(store_sales.ss_ext_sales_price)@5 * Some(100),20,0 / sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING@6 as revenueratio] | +| | WindowAggExec: wdw=[sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING: Ok(Field { name: "sum(sum(store_sales.ss_ext_sales_price)) PARTITION BY [item.i_class] ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING", data_type: Decimal128(27, 2), nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }), frame: WindowFrame { units: Rows, start_bound: Preceding(UInt64(NULL)), end_bound: Following(UInt64(NULL)), is_causal: false }] | +| | SortExec: expr=[i_class@3 ASC NULLS LAST], preserve_partitioning=[true] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_class@3], 24), input_partitions=24 | +| | AggregateExec: mode=FinalPartitioned, gby=[i_item_id@0 as i_item_id, i_item_desc@1 as i_item_desc, i_category@2 as i_category, i_class@3 as i_class, i_current_price@4 as i_current_price], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_id@0, i_item_desc@1, i_category@2, i_class@3, i_current_price@4], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[i_item_id@1 as i_item_id, i_item_desc@2 as i_item_desc, i_category@5 as i_category, i_class@4 as i_class, i_current_price@3 as i_current_price], aggr=[sum(store_sales.ss_ext_sales_price)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_sold_date_sk@0, d_date_sk@0)], projection=[ss_ext_sales_price@1, i_item_id@2, i_item_desc@3, i_current_price@4, i_class@5, i_category@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_sold_date_sk@0], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(ss_item_sk@1, i_item_sk@0)], projection=[ss_sold_date_sk@0, ss_ext_sales_price@2, i_item_id@4, i_item_desc@5, i_current_price@6, i_class@7, i_category@8] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([ss_item_sk@1], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_sold_date_sk, ss_item_sk, ss_ext_sales_price] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([i_item_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/item/item.parquet]]}, projection=[i_item_sk, i_item_id, i_item_desc, i_current_price, i_class, i_category], predicate=i_category@12 = Shoes OR i_category@12 = Music OR i_category@12 = Men, pruning_predicate=i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Shoes AND Shoes <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Music AND Music <= i_category_max@1 OR i_category_null_count@2 != i_category_row_count@3 AND i_category_min@0 <= Men AND Men <= i_category_max@1, required_guarantees=[N] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_date@2 >= 2000-01-05 AND d_date@2 <= 2000-02-04, pruning_predicate=d_date_null_count@1 != d_date_row_count@2 AND d_date_max@0 >= 2000-01-05 AND d_date_null_count@1 != d_date_row_count@2 AND d_date_min@3 <= 2000-02-04, required_guarantees=[N] | +| | | ++---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q99_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q99_explain.snap new file mode 100644 index 0000000000..919f277df8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q99_explain.snap @@ -0,0 +1,76 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q99" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Sort: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) ASC NULLS LAST, ship_mode.sm_type ASC NULLS LAST, call_center.cc_name ASC NULLS LAST, fetch=100 | +| | Projection: substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), ship_mode.sm_type, call_center.cc_name, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END) AS 30 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END) AS 31-60 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END) AS 61-90 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END) AS 91-120 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END) AS >120 days | +| | Aggregate: groupBy=[[substr(warehouse.w_warehouse_name, Int64(1), Int64(20)), ship_mode.sm_type, call_center.cc_name]], aggr=[[sum(CASE WHEN __common_expr_1 <= Int32(30) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(30) AND __common_expr_1 <= Int32(60) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(60) AND __common_expr_1 <= Int32(90) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(90) AND __common_expr_1 <= Int32(120) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN __common_expr_1 > Int32(120) THEN Int64(1) ELSE Int64(0) END) AS sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)]] | +| | Projection: catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk AS __common_expr_1, warehouse.w_warehouse_name, ship_mode.sm_type, call_center.cc_name | +| | Inner Join: catalog_sales.cs_ship_date_sk = date_dim.d_date_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, warehouse.w_warehouse_name, ship_mode.sm_type, call_center.cc_name | +| | Inner Join: catalog_sales.cs_call_center_sk = call_center.cc_call_center_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_call_center_sk, warehouse.w_warehouse_name, ship_mode.sm_type | +| | Inner Join: catalog_sales.cs_ship_mode_sk = ship_mode.sm_ship_mode_sk | +| | Projection: catalog_sales.cs_sold_date_sk, catalog_sales.cs_ship_date_sk, catalog_sales.cs_call_center_sk, catalog_sales.cs_ship_mode_sk, warehouse.w_warehouse_name | +| | Inner Join: catalog_sales.cs_warehouse_sk = warehouse.w_warehouse_sk | +| | BytesProcessedNode | +| | TableScan: catalog_sales projection=[cs_sold_date_sk, cs_ship_date_sk, cs_call_center_sk, cs_ship_mode_sk, cs_warehouse_sk] | +| | BytesProcessedNode | +| | TableScan: warehouse projection=[w_warehouse_sk, w_warehouse_name] | +| | BytesProcessedNode | +| | TableScan: ship_mode projection=[sm_ship_mode_sk, sm_type] | +| | BytesProcessedNode | +| | TableScan: call_center projection=[cc_call_center_sk, cc_name] | +| | BytesProcessedNode | +| | TableScan: date_dim projection=[d_date_sk], full_filters=[date_dim.d_month_seq >= Int32(1188), date_dim.d_month_seq <= Int32(1199)] | +| physical_plan | SortPreservingMergeExec: [substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 ASC NULLS LAST, sm_type@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST], fetch=100 | +| | SortExec: TopK(fetch=100), expr=[substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 ASC NULLS LAST, sm_type@1 ASC NULLS LAST, cc_name@2 ASC NULLS LAST], preserve_partitioning=[true] | +| | ProjectionExec: expr=[substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 as substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), sm_type@1 as sm_type, cc_name@2 as cc_name, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END)@3 as 30 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END)@4 as 31-60 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END)@5 as 61-90 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END)@6 as 91-120 days, sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)@7 as >120 days] | +| | AggregateExec: mode=FinalPartitioned, gby=[substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0 as substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), sm_type@1 as sm_type, cc_name@2 as cc_name], aggr=[sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([substr(warehouse.w_warehouse_name,Int64(1),Int64(20))@0, sm_type@1, cc_name@2], 24), input_partitions=24 | +| | AggregateExec: mode=Partial, gby=[substr(w_warehouse_name@1, 1, 20) as substr(warehouse.w_warehouse_name,Int64(1),Int64(20)), sm_type@2 as sm_type, cc_name@3 as cc_name], aggr=[sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(30) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(30) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(60) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(60) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(90) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(90) AND catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk <= Int64(120) THEN Int64(1) ELSE Int64(0) END), sum(CASE WHEN catalog_sales.cs_ship_date_sk - catalog_sales.cs_sold_date_sk > Int64(120) THEN Int64(1) ELSE Int64(0) END)] | +| | ProjectionExec: expr=[cs_ship_date_sk@1 - cs_sold_date_sk@0 as __common_expr_1, w_warehouse_name@2 as w_warehouse_name, sm_type@3 as sm_type, cc_name@4 as cc_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_ship_date_sk@1, d_date_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, w_warehouse_name@2, sm_type@3, cc_name@4] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_date_sk@1], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_call_center_sk@2, cc_call_center_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, w_warehouse_name@3, sm_type@4, cc_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_call_center_sk@2], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_ship_mode_sk@3, sm_ship_mode_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, cs_call_center_sk@2, w_warehouse_name@4, sm_type@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_ship_mode_sk@3], 24), input_partitions=24 | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | HashJoinExec: mode=Partitioned, join_type=Inner, on=[(cs_warehouse_sk@4, w_warehouse_sk@0)], projection=[cs_sold_date_sk@0, cs_ship_date_sk@1, cs_call_center_sk@2, cs_ship_mode_sk@3, w_warehouse_name@6] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cs_warehouse_sk@4], 24), input_partitions=24 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/catalog_sales/catalog_sales.parquet:0..4818070], [tpcds_sf1/catalog_sales/catalog_sales.parquet:4818070..9636140], [tpcds_sf1/catalog_sales/catalog_sales.parquet:9636140..14454210], [tpcds_sf1/catalog_sales/catalog_sales.parquet:14454210..19272280], [tpcds_sf1/catalog_sales/catalog_sales.parquet:19272280..24090350], ...]}, projection=[cs_sold_date_sk, cs_ship_date_sk, cs_call_center_sk, cs_ship_mode_sk, cs_warehouse_sk] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([w_warehouse_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/warehouse/warehouse.parquet]]}, projection=[w_warehouse_sk, w_warehouse_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([sm_ship_mode_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/ship_mode/ship_mode.parquet]]}, projection=[sm_ship_mode_sk, sm_type] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([cc_call_center_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/call_center/call_center.parquet]]}, projection=[cc_call_center_sk, cc_name] | +| | CoalesceBatchesExec: target_batch_size=8192 | +| | RepartitionExec: partitioning=Hash([d_date_sk@0], 24), input_partitions=24 | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/date_dim/date_dim.parquet]]}, projection=[d_date_sk], predicate=d_month_seq@3 >= 1188 AND d_month_seq@3 <= 1199, pruning_predicate=d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_max@0 >= 1188 AND d_month_seq_null_count@1 != d_month_seq_row_count@2 AND d_month_seq_min@3 <= 1199, required_guarantees=[N] | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q9_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q9_explain.snap new file mode 100644 index 0000000000..8bfdc900b0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-federated_tpcds_q9_explain.snap @@ -0,0 +1,181 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: tpcds_q9" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | Projection: CASE WHEN __scalar_sq_1.count(*) > Int64(31002) THEN __scalar_sq_2.avg(store_sales.ss_ext_discount_amt) ELSE __scalar_sq_3.avg(store_sales.ss_net_profit) END AS bucket1, CASE WHEN __scalar_sq_4.count(*) > Int64(588) THEN __scalar_sq_5.avg(store_sales.ss_ext_discount_amt) ELSE __scalar_sq_6.avg(store_sales.ss_net_profit) END AS bucket2, CASE WHEN __scalar_sq_7.count(*) > Int64(2456) THEN __scalar_sq_8.avg(store_sales.ss_ext_discount_amt) ELSE __scalar_sq_9.avg(store_sales.ss_net_profit) END AS bucket3, CASE WHEN __scalar_sq_10.count(*) > Int64(21645) THEN __scalar_sq_11.avg(store_sales.ss_ext_discount_amt) ELSE __scalar_sq_12.avg(store_sales.ss_net_profit) END AS bucket4, CASE WHEN __scalar_sq_13.count(*) > Int64(20553) THEN __scalar_sq_14.avg(store_sales.ss_ext_discount_amt) ELSE __scalar_sq_15.avg(store_sales.ss_net_profit) END AS bucket5 | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | Left Join: | +| | BytesProcessedNode | +| | TableScan: reason projection=[], full_filters=[reason.r_reason_sk = Int32(1)] | +| | SubqueryAlias: __scalar_sq_1 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[], full_filters=[store_sales.ss_quantity >= Int32(1), store_sales.ss_quantity <= Int32(20)] | +| | SubqueryAlias: __scalar_sq_2 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_ext_discount_amt], full_filters=[store_sales.ss_quantity >= Int32(1), store_sales.ss_quantity <= Int32(20)] | +| | SubqueryAlias: __scalar_sq_3 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_net_profit], full_filters=[store_sales.ss_quantity >= Int32(1), store_sales.ss_quantity <= Int32(20)] | +| | SubqueryAlias: __scalar_sq_4 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[], full_filters=[store_sales.ss_quantity >= Int32(21), store_sales.ss_quantity <= Int32(40)] | +| | SubqueryAlias: __scalar_sq_5 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_ext_discount_amt], full_filters=[store_sales.ss_quantity >= Int32(21), store_sales.ss_quantity <= Int32(40)] | +| | SubqueryAlias: __scalar_sq_6 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_net_profit], full_filters=[store_sales.ss_quantity >= Int32(21), store_sales.ss_quantity <= Int32(40)] | +| | SubqueryAlias: __scalar_sq_7 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[], full_filters=[store_sales.ss_quantity >= Int32(41), store_sales.ss_quantity <= Int32(60)] | +| | SubqueryAlias: __scalar_sq_8 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_ext_discount_amt], full_filters=[store_sales.ss_quantity >= Int32(41), store_sales.ss_quantity <= Int32(60)] | +| | SubqueryAlias: __scalar_sq_9 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_net_profit], full_filters=[store_sales.ss_quantity >= Int32(41), store_sales.ss_quantity <= Int32(60)] | +| | SubqueryAlias: __scalar_sq_10 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[], full_filters=[store_sales.ss_quantity >= Int32(61), store_sales.ss_quantity <= Int32(80)] | +| | SubqueryAlias: __scalar_sq_11 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_ext_discount_amt], full_filters=[store_sales.ss_quantity >= Int32(61), store_sales.ss_quantity <= Int32(80)] | +| | SubqueryAlias: __scalar_sq_12 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_net_profit], full_filters=[store_sales.ss_quantity >= Int32(61), store_sales.ss_quantity <= Int32(80)] | +| | SubqueryAlias: __scalar_sq_13 | +| | Aggregate: groupBy=[[]], aggr=[[count(Int64(1)) AS count(*)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[], full_filters=[store_sales.ss_quantity >= Int32(81), store_sales.ss_quantity <= Int32(100)] | +| | SubqueryAlias: __scalar_sq_14 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_ext_discount_amt)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_ext_discount_amt], full_filters=[store_sales.ss_quantity >= Int32(81), store_sales.ss_quantity <= Int32(100)] | +| | SubqueryAlias: __scalar_sq_15 | +| | Aggregate: groupBy=[[]], aggr=[[avg(store_sales.ss_net_profit)]] | +| | BytesProcessedNode | +| | TableScan: store_sales projection=[ss_net_profit], full_filters=[store_sales.ss_quantity >= Int32(81), store_sales.ss_quantity <= Int32(100)] | +| physical_plan | ProjectionExec: expr=[CASE WHEN count(*)@0 > 31002 THEN avg(store_sales.ss_ext_discount_amt)@1 ELSE avg(store_sales.ss_net_profit)@2 END as bucket1, CASE WHEN count(*)@3 > 588 THEN avg(store_sales.ss_ext_discount_amt)@4 ELSE avg(store_sales.ss_net_profit)@5 END as bucket2, CASE WHEN count(*)@6 > 2456 THEN avg(store_sales.ss_ext_discount_amt)@7 ELSE avg(store_sales.ss_net_profit)@8 END as bucket3, CASE WHEN count(*)@9 > 21645 THEN avg(store_sales.ss_ext_discount_amt)@10 ELSE avg(store_sales.ss_net_profit)@11 END as bucket4, CASE WHEN count(*)@12 > 20553 THEN avg(store_sales.ss_ext_discount_amt)@13 ELSE avg(store_sales.ss_net_profit)@14 END as bucket5] | +| | RepartitionExec: partitioning=RoundRobinBatch(24), input_partitions=1 | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | NestedLoopJoinExec: join_type=Left | +| | BytesProcessedExec | +| | ParquetExec: file_groups={1 group: [[tpcds_sf1/reason/reason.parquet]]}, predicate=r_reason_sk@0 = 1, pruning_predicate=r_reason_sk_null_count@2 != r_reason_sk_row_count@3 AND r_reason_sk_min@0 <= 1 AND 1 <= r_reason_sk_max@1, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, predicate=ss_quantity@10 >= 1 AND ss_quantity@10 <= 20, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 1 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 20, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_ext_discount_amt], predicate=ss_quantity@10 >= 1 AND ss_quantity@10 <= 20, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 1 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 20, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_net_profit], predicate=ss_quantity@10 >= 1 AND ss_quantity@10 <= 20, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 1 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 20, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, predicate=ss_quantity@10 >= 21 AND ss_quantity@10 <= 40, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 21 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 40, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_ext_discount_amt], predicate=ss_quantity@10 >= 21 AND ss_quantity@10 <= 40, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 21 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 40, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_net_profit], predicate=ss_quantity@10 >= 21 AND ss_quantity@10 <= 40, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 21 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 40, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, predicate=ss_quantity@10 >= 41 AND ss_quantity@10 <= 60, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 41 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 60, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_ext_discount_amt], predicate=ss_quantity@10 >= 41 AND ss_quantity@10 <= 60, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 41 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 60, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_net_profit], predicate=ss_quantity@10 >= 41 AND ss_quantity@10 <= 60, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 41 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 60, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, predicate=ss_quantity@10 >= 61 AND ss_quantity@10 <= 80, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 61 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 80, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_ext_discount_amt], predicate=ss_quantity@10 >= 61 AND ss_quantity@10 <= 80, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 61 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 80, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_net_profit], predicate=ss_quantity@10 >= 61 AND ss_quantity@10 <= 80, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 61 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 80, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[count(*)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[count(*)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, predicate=ss_quantity@10 >= 81 AND ss_quantity@10 <= 100, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 81 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 100, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_ext_discount_amt)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_ext_discount_amt], predicate=ss_quantity@10 >= 81 AND ss_quantity@10 <= 100, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 81 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 100, required_guarantees=[N] | +| | AggregateExec: mode=Final, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | CoalescePartitionsExec | +| | AggregateExec: mode=Partial, gby=[], aggr=[avg(store_sales.ss_net_profit)] | +| | BytesProcessedExec | +| | ParquetExec: file_groups={24 groups: [[tpcds_sf1/store_sales/store_sales.parquet:0..6425320], [tpcds_sf1/store_sales/store_sales.parquet:6425320..12850640], [tpcds_sf1/store_sales/store_sales.parquet:12850640..19275960], [tpcds_sf1/store_sales/store_sales.parquet:19275960..25701280], [tpcds_sf1/store_sales/store_sales.parquet:25701280..32126600], ...]}, projection=[ss_net_profit], predicate=ss_quantity@10 >= 81 AND ss_quantity@10 <= 100, pruning_predicate=ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_max@0 >= 81 AND ss_quantity_null_count@1 != ss_quantity_row_count@2 AND ss_quantity_min@3 <= 100, required_guarantees=[N] | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q10_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q10_explain.snap new file mode 100644 index 0000000000..64f5c83921 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q10_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q10" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.RegionID, sum(hits.AdvEngineID), count(*) AS c, avg(hits.ResolutionWidth), count(DISTINCT hits.UserID) | +| | Aggregate: groupBy=[[hits.RegionID]], aggr=[[sum(hits.AdvEngineID), count(*), avg(hits.ResolutionWidth), count(DISTINCT hits.UserID)]] | +| | TableScan: hits projection=[RegionID, UserID, ResolutionWidth, AdvEngineID] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.RegionID, sum(hits.AdvEngineID), count(*) AS c, avg(hits.ResolutionWidth), count(DISTINCT hits.UserID) FROM hits GROUP BY hits.RegionID ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`RegionID`, sum(`hits`.`AdvEngineID`), count(*) AS `c`, avg(`hits`.`ResolutionWidth`), count(DISTINCT `hits`.`UserID`) FROM `hits` GROUP BY `hits`.`RegionID` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q11_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q11_explain.snap new file mode 100644 index 0000000000..46cb264a0f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q11_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q11" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: u DESC NULLS FIRST | +| | Projection: hits.MobilePhoneModel, count(DISTINCT hits.UserID) AS u | +| | Aggregate: groupBy=[[hits.MobilePhoneModel]], aggr=[[count(DISTINCT hits.UserID)]] | +| | TableScan: hits projection=[UserID, MobilePhoneModel], full_filters=[hits.MobilePhoneModel != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.MobilePhoneModel, count(DISTINCT hits.UserID) AS u FROM hits WHERE (hits.MobilePhoneModel <> '') GROUP BY hits.MobilePhoneModel ORDER BY u DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`MobilePhoneModel`, count(DISTINCT `hits`.`UserID`) AS `u` FROM `hits` WHERE (`hits`.`MobilePhoneModel` <> '') GROUP BY `hits`.`MobilePhoneModel` ORDER BY `u` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q12_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q12_explain.snap new file mode 100644 index 0000000000..22d68cd86d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q12_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q12" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: u DESC NULLS FIRST | +| | Projection: hits.MobilePhone, hits.MobilePhoneModel, count(DISTINCT hits.UserID) AS u | +| | Aggregate: groupBy=[[hits.MobilePhone, hits.MobilePhoneModel]], aggr=[[count(DISTINCT hits.UserID)]] | +| | TableScan: hits projection=[UserID, MobilePhone, MobilePhoneModel], full_filters=[hits.MobilePhoneModel != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.MobilePhone, hits.MobilePhoneModel, count(DISTINCT hits.UserID) AS u FROM hits WHERE (hits.MobilePhoneModel <> '') GROUP BY hits.MobilePhone, hits.MobilePhoneModel ORDER BY u DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`MobilePhone`, `hits`.`MobilePhoneModel`, count(DISTINCT `hits`.`UserID`) AS `u` FROM `hits` WHERE (`hits`.`MobilePhoneModel` <> '') GROUP BY `hits`.`MobilePhone`, `hits`.`MobilePhoneModel` ORDER BY `u` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q13_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q13_explain.snap new file mode 100644 index 0000000000..563f0d1d45 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q13_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q13" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.SearchPhrase, count(*) AS c | +| | Aggregate: groupBy=[[hits.SearchPhrase]], aggr=[[count(*)]] | +| | TableScan: hits projection=[SearchPhrase], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.SearchPhrase, count(*) AS c FROM hits WHERE (hits.SearchPhrase <> '') GROUP BY hits.SearchPhrase ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`SearchPhrase`, count(*) AS `c` FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') GROUP BY `hits`.`SearchPhrase` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q14_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q14_explain.snap new file mode 100644 index 0000000000..53aca599a4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q14_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q14" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: u DESC NULLS FIRST | +| | Projection: hits.SearchPhrase, count(DISTINCT hits.UserID) AS u | +| | Aggregate: groupBy=[[hits.SearchPhrase]], aggr=[[count(DISTINCT hits.UserID)]] | +| | TableScan: hits projection=[UserID, SearchPhrase], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.SearchPhrase, count(DISTINCT hits.UserID) AS u FROM hits WHERE (hits.SearchPhrase <> '') GROUP BY hits.SearchPhrase ORDER BY u DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`SearchPhrase`, count(DISTINCT `hits`.`UserID`) AS `u` FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') GROUP BY `hits`.`SearchPhrase` ORDER BY `u` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q15_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q15_explain.snap new file mode 100644 index 0000000000..7e84179b18 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q15_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q15" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.SearchEngineID, hits.SearchPhrase, count(*) AS c | +| | Aggregate: groupBy=[[hits.SearchEngineID, hits.SearchPhrase]], aggr=[[count(*)]] | +| | TableScan: hits projection=[SearchEngineID, SearchPhrase], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.SearchEngineID, hits.SearchPhrase, count(*) AS c FROM hits WHERE (hits.SearchPhrase <> '') GROUP BY hits.SearchEngineID, hits.SearchPhrase ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`SearchEngineID`, `hits`.`SearchPhrase`, count(*) AS `c` FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') GROUP BY `hits`.`SearchEngineID`, `hits`.`SearchPhrase` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q16_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q16_explain.snap new file mode 100644 index 0000000000..ee4882c877 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q16_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q16" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: count(*) DESC NULLS FIRST | +| | Projection: hits.UserID, count(*) | +| | Aggregate: groupBy=[[hits.UserID]], aggr=[[count(*)]] | +| | TableScan: hits projection=[UserID] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.UserID, count(*) FROM hits GROUP BY hits.UserID ORDER BY count(*) DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`UserID`, count(*) FROM `hits` GROUP BY `hits`.`UserID` ORDER BY count(*) DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q17_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q17_explain.snap new file mode 100644 index 0000000000..5f593a81b5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q17_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q17" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: count(*) DESC NULLS FIRST | +| | Projection: hits.UserID, hits.SearchPhrase, count(*) | +| | Aggregate: groupBy=[[hits.UserID, hits.SearchPhrase]], aggr=[[count(*)]] | +| | TableScan: hits projection=[UserID, SearchPhrase] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.UserID, hits.SearchPhrase, count(*) FROM hits GROUP BY hits.UserID, hits.SearchPhrase ORDER BY count(*) DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`UserID`, `hits`.`SearchPhrase`, count(*) FROM `hits` GROUP BY `hits`.`UserID`, `hits`.`SearchPhrase` ORDER BY count(*) DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q18_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q18_explain.snap new file mode 100644 index 0000000000..8fb04ec735 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q18_explain.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q18" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Projection: hits.UserID, hits.SearchPhrase, count(*) | +| | Aggregate: groupBy=[[hits.UserID, hits.SearchPhrase]], aggr=[[count(*)]] | +| | TableScan: hits projection=[UserID, SearchPhrase] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.UserID, hits.SearchPhrase, count(*) FROM hits GROUP BY hits.UserID, hits.SearchPhrase LIMIT 10 rewritten_sql=SELECT `hits`.`UserID`, `hits`.`SearchPhrase`, count(*) FROM `hits` GROUP BY `hits`.`UserID`, `hits`.`SearchPhrase` LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q19_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q19_explain.snap new file mode 100644 index 0000000000..2dcff21f01 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q19_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q19" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: count(*) DESC NULLS FIRST | +| | Projection: hits.UserID, date_part(Utf8("minute"),from_unixtime(hits.EventTime)) AS m, hits.SearchPhrase, count(*) | +| | Aggregate: groupBy=[[hits.UserID, date_part(Utf8("minute"), from_unixtime(hits.EventTime)), hits.SearchPhrase]], aggr=[[count(*)]] | +| | TableScan: hits projection=[EventTime, UserID, SearchPhrase] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.UserID, date_part('minute', from_unixtime(hits.EventTime)) AS m, hits.SearchPhrase, count(*) FROM hits GROUP BY hits.UserID, date_part('minute', from_unixtime(hits.EventTime)), hits.SearchPhrase ORDER BY count(*) DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`UserID`, strftime('%M', datetime(`hits`.`EventTime`, 'unixepoch')) AS `m`, `hits`.`SearchPhrase`, count(*) FROM `hits` GROUP BY `hits`.`UserID`, strftime('%M', datetime(`hits`.`EventTime`, 'unixepoch')), `hits`.`SearchPhrase` ORDER BY count(*) DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q1_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q1_explain.snap new file mode 100644 index 0000000000..23c4dc2ce2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q1_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q1" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | TableScan: hits projection=[] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT count(*) FROM hits rewritten_sql=SELECT count(*) FROM `hits` | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q20_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q20_explain.snap new file mode 100644 index 0000000000..c3a14e6b55 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q20_explain.snap @@ -0,0 +1,16 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q20" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: hits.UserID | +| | TableScan: hits projection=[UserID], full_filters=[hits.UserID = Int64(435090932899640449)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.UserID FROM hits WHERE (hits.UserID = 435090932899640449) rewritten_sql=SELECT `hits`.`UserID` FROM `hits` WHERE (`hits`.`UserID` = 435090932899640449) | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q21_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q21_explain.snap new file mode 100644 index 0000000000..46eff8ddf3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q21_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q21" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | TableScan: hits projection=[], full_filters=[hits.URL LIKE Utf8("%google%")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT count(*) FROM hits WHERE hits."URL" LIKE '%google%' rewritten_sql=SELECT count(*) FROM `hits` WHERE `hits`.`URL` LIKE '%google%' | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q22_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q22_explain.snap new file mode 100644 index 0000000000..b3956df91d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q22_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q22" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.SearchPhrase, min(hits.URL), count(*) AS c | +| | Aggregate: groupBy=[[hits.SearchPhrase]], aggr=[[min(hits.URL), count(*)]] | +| | TableScan: hits projection=[URL, SearchPhrase], full_filters=[hits.URL LIKE Utf8("%google%"), hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.SearchPhrase, min(hits."URL"), count(*) AS c FROM hits WHERE (hits."URL" LIKE '%google%' AND (hits.SearchPhrase <> '')) GROUP BY hits.SearchPhrase ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`SearchPhrase`, min(`hits`.`URL`), count(*) AS `c` FROM `hits` WHERE (`hits`.`URL` LIKE '%google%' AND (`hits`.`SearchPhrase` <> '')) GROUP BY `hits`.`SearchPhrase` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q23_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q23_explain.snap new file mode 100644 index 0000000000..aa6d9fe4b3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q23_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q23" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.SearchPhrase, min(hits.URL), min(hits.Title), count(*) AS c, count(DISTINCT hits.UserID) | +| | Aggregate: groupBy=[[hits.SearchPhrase]], aggr=[[min(hits.URL), min(hits.Title), count(*), count(DISTINCT hits.UserID)]] | +| | TableScan: hits projection=[Title, UserID, URL, SearchPhrase], full_filters=[hits.Title LIKE Utf8("%Google%"), hits.URL NOT LIKE Utf8("%.google.%"), hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.SearchPhrase, min(hits."URL"), min(hits.Title), count(*) AS c, count(DISTINCT hits.UserID) FROM hits WHERE ((hits.Title LIKE '%Google%' AND hits."URL" NOT LIKE '%.google.%') AND (hits.SearchPhrase <> '')) GROUP BY hits.SearchPhrase ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`SearchPhrase`, min(`hits`.`URL`), min(`hits`.`Title`), count(*) AS `c`, count(DISTINCT `hits`.`UserID`) FROM `hits` WHERE ((`hits`.`Title` LIKE '%Google%' AND `hits`.`URL` NOT LIKE '%.google.%') AND (`hits`.`SearchPhrase` <> '')) GROUP BY `hits`.`SearchPhrase` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q24_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q24_explain.snap new file mode 100644 index 0000000000..b7bebbdcce --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q24_explain.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q24" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: from_unixtime(hits.EventTime) ASC NULLS LAST | +| | Projection: hits.WatchID, hits.JavaEnable, hits.Title, hits.GoodEvent, hits.EventTime, hits.EventDate, hits.CounterID, hits.ClientIP, hits.RegionID, hits.UserID, hits.CounterClass, hits.OS, hits.UserAgent, hits.URL, hits.Referer, hits.IsRefresh, hits.RefererCategoryID, hits.RefererRegionID, hits.URLCategoryID, hits.URLRegionID, hits.ResolutionWidth, hits.ResolutionHeight, hits.ResolutionDepth, hits.FlashMajor, hits.FlashMinor, hits.FlashMinor2, hits.NetMajor, hits.NetMinor, hits.UserAgentMajor, hits.UserAgentMinor, hits.CookieEnable, hits.JavascriptEnable, hits.IsMobile, hits.MobilePhone, hits.MobilePhoneModel, hits.Params, hits.IPNetworkID, hits.TraficSourceID, hits.SearchEngineID, hits.SearchPhrase, hits.AdvEngineID, hits.IsArtifical, hits.WindowClientWidth, hits.WindowClientHeight, hits.ClientTimeZone, hits.ClientEventTime, hits.SilverlightVersion1, hits.SilverlightVersion2, hits.SilverlightVersion3, hits.SilverlightVersion4, hits.PageCharset, hits.CodeVersion, hits.IsLink, hits.IsDownload, hits.IsNotBounce, hits.FUniqID, hits.OriginalURL, hits.HID, hits.IsOldCounter, hits.IsEvent, hits.IsParameter, hits.DontCountHits, hits.WithHash, hits.HitColor, hits.LocalEventTime, hits.Age, hits.Sex, hits.Income, hits.Interests, hits.Robotness, hits.RemoteIP, hits.WindowName, hits.OpenerName, hits.HistoryLength, hits.BrowserLanguage, hits.BrowserCountry, hits.SocialNetwork, hits.SocialAction, hits.HTTPError, hits.SendTiming, hits.DNSTiming, hits.ConnectTiming, hits.ResponseStartTiming, hits.ResponseEndTiming, hits.FetchTiming, hits.SocialSourceNetworkID, hits.SocialSourcePage, hits.ParamPrice, hits.ParamOrderID, hits.ParamCurrency, hits.ParamCurrencyID, hits.OpenstatServiceName, hits.OpenstatCampaignID, hits.OpenstatAdID, hits.OpenstatSourceID, hits.UTMSource, hits.UTMMedium, hits.UTMCampaign, hits.UTMContent, hits.UTMTerm, hits.FromTag, hits.HasGCLID, hits.RefererHash, hits.URLHash, hits.CLID | +| | TableScan: hits projection=[WatchID, JavaEnable, Title, GoodEvent, EventTime, EventDate, CounterID, ClientIP, RegionID, UserID, CounterClass, OS, UserAgent, URL, Referer, IsRefresh, RefererCategoryID, RefererRegionID, URLCategoryID, URLRegionID, ResolutionWidth, ResolutionHeight, ResolutionDepth, FlashMajor, FlashMinor, FlashMinor2, NetMajor, NetMinor, UserAgentMajor, UserAgentMinor, CookieEnable, JavascriptEnable, IsMobile, MobilePhone, MobilePhoneModel, Params, IPNetworkID, TraficSourceID, SearchEngineID, SearchPhrase, AdvEngineID, IsArtifical, WindowClientWidth, WindowClientHeight, ClientTimeZone, ClientEventTime, SilverlightVersion1, SilverlightVersion2, SilverlightVersion3, SilverlightVersion4, PageCharset, CodeVersion, IsLink, IsDownload, IsNotBounce, FUniqID, OriginalURL, HID, IsOldCounter, IsEvent, IsParameter, DontCountHits, WithHash, HitColor, LocalEventTime, Age, Sex, Income, Interests, Robotness, RemoteIP, WindowName, OpenerName, HistoryLength, BrowserLanguage, BrowserCountry, SocialNetwork, SocialAction, HTTPError, SendTiming, DNSTiming, ConnectTiming, ResponseStartTiming, ResponseEndTiming, FetchTiming, SocialSourceNetworkID, SocialSourcePage, ParamPrice, ParamOrderID, ParamCurrency, ParamCurrencyID, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash, URLHash, CLID], full_filters=[hits.URL LIKE Utf8("%google%")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.WatchID, hits.JavaEnable, hits.Title, hits.GoodEvent, hits.EventTime, hits.EventDate, hits.CounterID, hits.ClientIP, hits.RegionID, hits.UserID, hits.CounterClass, hits.OS, hits.UserAgent, hits."URL", hits.Referer, hits.IsRefresh, hits.RefererCategoryID, hits.RefererRegionID, hits.URLCategoryID, hits.URLRegionID, hits.ResolutionWidth, hits.ResolutionHeight, hits.ResolutionDepth, hits.FlashMajor, hits.FlashMinor, hits.FlashMinor2, hits.NetMajor, hits.NetMinor, hits.UserAgentMajor, hits.UserAgentMinor, hits.CookieEnable, hits.JavascriptEnable, hits.IsMobile, hits.MobilePhone, hits.MobilePhoneModel, hits.Params, hits.IPNetworkID, hits.TraficSourceID, hits.SearchEngineID, hits.SearchPhrase, hits.AdvEngineID, hits.IsArtifical, hits.WindowClientWidth, hits.WindowClientHeight, hits.ClientTimeZone, hits.ClientEventTime, hits.SilverlightVersion1, hits.SilverlightVersion2, hits.SilverlightVersion3, hits.SilverlightVersion4, hits.PageCharset, hits.CodeVersion, hits.IsLink, hits.IsDownload, hits.IsNotBounce, hits.FUniqID, hits.OriginalURL, hits.HID, hits.IsOldCounter, hits.IsEvent, hits.IsParameter, hits.DontCountHits, hits.WithHash, hits.HitColor, hits.LocalEventTime, hits.Age, hits.Sex, hits.Income, hits.Interests, hits.Robotness, hits.RemoteIP, hits.WindowName, hits.OpenerName, hits.HistoryLength, hits.BrowserLanguage, hits.BrowserCountry, hits.SocialNetwork, hits.SocialAction, hits.HTTPError, hits.SendTiming, hits.DNSTiming, hits.ConnectTiming, hits.ResponseStartTiming, hits.ResponseEndTiming, hits.FetchTiming, hits.SocialSourceNetworkID, hits.SocialSourcePage, hits.ParamPrice, hits.ParamOrderID, hits.ParamCurrency, hits.ParamCurrencyID, hits.OpenstatServiceName, hits.OpenstatCampaignID, hits.OpenstatAdID, hits.OpenstatSourceID, hits.UTMSource, hits.UTMMedium, hits.UTMCampaign, hits.UTMContent, hits.UTMTerm, hits.FromTag, hits.HasGCLID, hits.RefererHash, hits.URLHash, hits.CLID FROM hits WHERE hits."URL" LIKE '%google%' ORDER BY from_unixtime(hits.EventTime) ASC NULLS LAST LIMIT 10 rewritten_sql=SELECT `hits`.`WatchID`, `hits`.`JavaEnable`, `hits`.`Title`, `hits`.`GoodEvent`, `hits`.`EventTime`, `hits`.`EventDate`, `hits`.`CounterID`, `hits`.`ClientIP`, `hits`.`RegionID`, `hits`.`UserID`, `hits`.`CounterClass`, `hits`.`OS`, `hits`.`UserAgent`, `hits`.`URL`, `hits`.`Referer`, `hits`.`IsRefresh`, `hits`.`RefererCategoryID`, `hits`.`RefererRegionID`, `hits`.`URLCategoryID`, `hits`.`URLRegionID`, `hits`.`ResolutionWidth`, `hits`.`ResolutionHeight`, `hits`.`ResolutionDepth`, `hits`.`FlashMajor`, `hits`.`FlashMinor`, `hits`.`FlashMinor2`, `hits`.`NetMajor`, `hits`.`NetMinor`, `hits`.`UserAgentMajor`, `hits`.`UserAgentMinor`, `hits`.`CookieEnable`, `hits`.`JavascriptEnable`, `hits`.`IsMobile`, `hits`.`MobilePhone`, `hits`.`MobilePhoneModel`, `hits`.`Params`, `hits`.`IPNetworkID`, `hits`.`TraficSourceID`, `hits`.`SearchEngineID`, `hits`.`SearchPhrase`, `hits`.`AdvEngineID`, `hits`.`IsArtifical`, `hits`.`WindowClientWidth`, `hits`.`WindowClientHeight`, `hits`.`ClientTimeZone`, `hits`.`ClientEventTime`, `hits`.`SilverlightVersion1`, `hits`.`SilverlightVersion2`, `hits`.`SilverlightVersion3`, `hits`.`SilverlightVersion4`, `hits`.`PageCharset`, `hits`.`CodeVersion`, `hits`.`IsLink`, `hits`.`IsDownload`, `hits`.`IsNotBounce`, `hits`.`FUniqID`, `hits`.`OriginalURL`, `hits`.`HID`, `hits`.`IsOldCounter`, `hits`.`IsEvent`, `hits`.`IsParameter`, `hits`.`DontCountHits`, `hits`.`WithHash`, `hits`.`HitColor`, `hits`.`LocalEventTime`, `hits`.`Age`, `hits`.`Sex`, `hits`.`Income`, `hits`.`Interests`, `hits`.`Robotness`, `hits`.`RemoteIP`, `hits`.`WindowName`, `hits`.`OpenerName`, `hits`.`HistoryLength`, `hits`.`BrowserLanguage`, `hits`.`BrowserCountry`, `hits`.`SocialNetwork`, `hits`.`SocialAction`, `hits`.`HTTPError`, `hits`.`SendTiming`, `hits`.`DNSTiming`, `hits`.`ConnectTiming`, `hits`.`ResponseStartTiming`, `hits`.`ResponseEndTiming`, `hits`.`FetchTiming`, `hits`.`SocialSourceNetworkID`, `hits`.`SocialSourcePage`, `hits`.`ParamPrice`, `hits`.`ParamOrderID`, `hits`.`ParamCurrency`, `hits`.`ParamCurrencyID`, `hits`.`OpenstatServiceName`, `hits`.`OpenstatCampaignID`, `hits`.`OpenstatAdID`, `hits`.`OpenstatSourceID`, `hits`.`UTMSource`, `hits`.`UTMMedium`, `hits`.`UTMCampaign`, `hits`.`UTMContent`, `hits`.`UTMTerm`, `hits`.`FromTag`, `hits`.`HasGCLID`, `hits`.`RefererHash`, `hits`.`URLHash`, `hits`.`CLID` FROM `hits` WHERE `hits`.`URL` LIKE '%google%' ORDER BY datetime(`hits`.`EventTime`, 'unixepoch') ASC NULLS LAST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q25_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q25_explain.snap new file mode 100644 index 0000000000..974b1c7c56 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q25_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q25" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Projection: hits.SearchPhrase | +| | Sort: from_unixtime(hits.EventTime) ASC NULLS LAST | +| | Projection: hits.SearchPhrase, hits.EventTime | +| | TableScan: hits projection=[EventTime, SearchPhrase], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT SearchPhrase FROM (SELECT hits.SearchPhrase, hits.EventTime FROM hits WHERE (hits.SearchPhrase <> '') ORDER BY from_unixtime(hits.EventTime) ASC NULLS LAST) LIMIT 10 rewritten_sql=SELECT `SearchPhrase` FROM (SELECT `hits`.`SearchPhrase`, `hits`.`EventTime` FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') ORDER BY datetime(`hits`.`EventTime`, 'unixepoch') ASC NULLS LAST) LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q26_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q26_explain.snap new file mode 100644 index 0000000000..a5e5a0bee6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q26_explain.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q26" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: hits.SearchPhrase ASC NULLS LAST | +| | Projection: hits.SearchPhrase | +| | TableScan: hits projection=[SearchPhrase], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.SearchPhrase FROM hits WHERE (hits.SearchPhrase <> '') ORDER BY hits.SearchPhrase ASC NULLS LAST LIMIT 10 rewritten_sql=SELECT `hits`.`SearchPhrase` FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') ORDER BY `hits`.`SearchPhrase` ASC NULLS LAST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q27_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q27_explain.snap new file mode 100644 index 0000000000..f273202722 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q27_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q27" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Projection: hits.SearchPhrase | +| | Sort: from_unixtime(hits.EventTime) ASC NULLS LAST, hits.SearchPhrase ASC NULLS LAST | +| | Projection: hits.SearchPhrase, hits.EventTime | +| | TableScan: hits projection=[EventTime, SearchPhrase], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT SearchPhrase FROM (SELECT hits.SearchPhrase, hits.EventTime FROM hits WHERE (hits.SearchPhrase <> '') ORDER BY from_unixtime(hits.EventTime) ASC NULLS LAST, hits.SearchPhrase ASC NULLS LAST) LIMIT 10 rewritten_sql=SELECT `SearchPhrase` FROM (SELECT `hits`.`SearchPhrase`, `hits`.`EventTime` FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') ORDER BY datetime(`hits`.`EventTime`, 'unixepoch') ASC NULLS LAST, `hits`.`SearchPhrase` ASC NULLS LAST) LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q28_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q28_explain.snap new file mode 100644 index 0000000000..dac85e4bac --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q28_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q28" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=25 | +| | Sort: l DESC NULLS FIRST | +| | Projection: hits.CounterID, avg(character_length(hits.URL)) AS l, count(*) AS c | +| | Filter: count(*) > Int64(100000) | +| | Aggregate: groupBy=[[hits.CounterID]], aggr=[[avg(character_length(hits.URL)), count(*)]] | +| | TableScan: hits projection=[CounterID, URL], full_filters=[hits.URL != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.CounterID, avg(character_length(hits."URL")) AS l, count(*) AS c FROM hits WHERE (hits."URL" <> '') GROUP BY hits.CounterID HAVING (count(*) > 100000) ORDER BY l DESC NULLS FIRST LIMIT 25 rewritten_sql=SELECT `hits`.`CounterID`, avg(length(`hits`.`URL`)) AS `l`, count(*) AS `c` FROM `hits` WHERE (`hits`.`URL` <> '') GROUP BY `hits`.`CounterID` HAVING (count(*) > 100000) ORDER BY `l` DESC NULLS FIRST LIMIT 25 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q2_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q2_explain.snap new file mode 100644 index 0000000000..2fb8f753a3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q2_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q2" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: count(*) | +| | Aggregate: groupBy=[[]], aggr=[[count(*)]] | +| | TableScan: hits projection=[], full_filters=[hits.AdvEngineID != Int64(0)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT count(*) FROM hits WHERE (hits.AdvEngineID <> 0) rewritten_sql=SELECT count(*) FROM `hits` WHERE (`hits`.`AdvEngineID` <> 0) | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q30_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q30_explain.snap new file mode 100644 index 0000000000..c3b5a116d5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q30_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q30" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: sum(hits.ResolutionWidth), sum(hits.ResolutionWidth + Int64(1)), sum(hits.ResolutionWidth + Int64(2)), sum(hits.ResolutionWidth + Int64(3)), sum(hits.ResolutionWidth + Int64(4)), sum(hits.ResolutionWidth + Int64(5)), sum(hits.ResolutionWidth + Int64(6)), sum(hits.ResolutionWidth + Int64(7)), sum(hits.ResolutionWidth + Int64(8)), sum(hits.ResolutionWidth + Int64(9)), sum(hits.ResolutionWidth + Int64(10)), sum(hits.ResolutionWidth + Int64(11)), sum(hits.ResolutionWidth + Int64(12)), sum(hits.ResolutionWidth + Int64(13)), sum(hits.ResolutionWidth + Int64(14)), sum(hits.ResolutionWidth + Int64(15)), sum(hits.ResolutionWidth + Int64(16)), sum(hits.ResolutionWidth + Int64(17)), sum(hits.ResolutionWidth + Int64(18)), sum(hits.ResolutionWidth + Int64(19)), sum(hits.ResolutionWidth + Int64(20)), sum(hits.ResolutionWidth + Int64(21)), sum(hits.ResolutionWidth + Int64(22)), sum(hits.ResolutionWidth + Int64(23)), sum(hits.ResolutionWidth + Int64(24)), sum(hits.ResolutionWidth + Int64(25)), sum(hits.ResolutionWidth + Int64(26)), sum(hits.ResolutionWidth + Int64(27)), sum(hits.ResolutionWidth + Int64(28)), sum(hits.ResolutionWidth + Int64(29)), sum(hits.ResolutionWidth + Int64(30)), sum(hits.ResolutionWidth + Int64(31)), sum(hits.ResolutionWidth + Int64(32)), sum(hits.ResolutionWidth + Int64(33)), sum(hits.ResolutionWidth + Int64(34)), sum(hits.ResolutionWidth + Int64(35)), sum(hits.ResolutionWidth + Int64(36)), sum(hits.ResolutionWidth + Int64(37)), sum(hits.ResolutionWidth + Int64(38)), sum(hits.ResolutionWidth + Int64(39)), sum(hits.ResolutionWidth + Int64(40)), sum(hits.ResolutionWidth + Int64(41)), sum(hits.ResolutionWidth + Int64(42)), sum(hits.ResolutionWidth + Int64(43)), sum(hits.ResolutionWidth + Int64(44)), sum(hits.ResolutionWidth + Int64(45)), sum(hits.ResolutionWidth + Int64(46)), sum(hits.ResolutionWidth + Int64(47)), sum(hits.ResolutionWidth + Int64(48)), sum(hits.ResolutionWidth + Int64(49)), sum(hits.ResolutionWidth + Int64(50)), sum(hits.ResolutionWidth + Int64(51)), sum(hits.ResolutionWidth + Int64(52)), sum(hits.ResolutionWidth + Int64(53)), sum(hits.ResolutionWidth + Int64(54)), sum(hits.ResolutionWidth + Int64(55)), sum(hits.ResolutionWidth + Int64(56)), sum(hits.ResolutionWidth + Int64(57)), sum(hits.ResolutionWidth + Int64(58)), sum(hits.ResolutionWidth + Int64(59)), sum(hits.ResolutionWidth + Int64(60)), sum(hits.ResolutionWidth + Int64(61)), sum(hits.ResolutionWidth + Int64(62)), sum(hits.ResolutionWidth + Int64(63)), sum(hits.ResolutionWidth + Int64(64)), sum(hits.ResolutionWidth + Int64(65)), sum(hits.ResolutionWidth + Int64(66)), sum(hits.ResolutionWidth + Int64(67)), sum(hits.ResolutionWidth + Int64(68)), sum(hits.ResolutionWidth + Int64(69)), sum(hits.ResolutionWidth + Int64(70)), sum(hits.ResolutionWidth + Int64(71)), sum(hits.ResolutionWidth + Int64(72)), sum(hits.ResolutionWidth + Int64(73)), sum(hits.ResolutionWidth + Int64(74)), sum(hits.ResolutionWidth + Int64(75)), sum(hits.ResolutionWidth + Int64(76)), sum(hits.ResolutionWidth + Int64(77)), sum(hits.ResolutionWidth + Int64(78)), sum(hits.ResolutionWidth + Int64(79)), sum(hits.ResolutionWidth + Int64(80)), sum(hits.ResolutionWidth + Int64(81)), sum(hits.ResolutionWidth + Int64(82)), sum(hits.ResolutionWidth + Int64(83)), sum(hits.ResolutionWidth + Int64(84)), sum(hits.ResolutionWidth + Int64(85)), sum(hits.ResolutionWidth + Int64(86)), sum(hits.ResolutionWidth + Int64(87)), sum(hits.ResolutionWidth + Int64(88)), sum(hits.ResolutionWidth + Int64(89)) | +| | Aggregate: groupBy=[[]], aggr=[[sum(hits.ResolutionWidth), sum(hits.ResolutionWidth + Int64(1)), sum(hits.ResolutionWidth + Int64(2)), sum(hits.ResolutionWidth + Int64(3)), sum(hits.ResolutionWidth + Int64(4)), sum(hits.ResolutionWidth + Int64(5)), sum(hits.ResolutionWidth + Int64(6)), sum(hits.ResolutionWidth + Int64(7)), sum(hits.ResolutionWidth + Int64(8)), sum(hits.ResolutionWidth + Int64(9)), sum(hits.ResolutionWidth + Int64(10)), sum(hits.ResolutionWidth + Int64(11)), sum(hits.ResolutionWidth + Int64(12)), sum(hits.ResolutionWidth + Int64(13)), sum(hits.ResolutionWidth + Int64(14)), sum(hits.ResolutionWidth + Int64(15)), sum(hits.ResolutionWidth + Int64(16)), sum(hits.ResolutionWidth + Int64(17)), sum(hits.ResolutionWidth + Int64(18)), sum(hits.ResolutionWidth + Int64(19)), sum(hits.ResolutionWidth + Int64(20)), sum(hits.ResolutionWidth + Int64(21)), sum(hits.ResolutionWidth + Int64(22)), sum(hits.ResolutionWidth + Int64(23)), sum(hits.ResolutionWidth + Int64(24)), sum(hits.ResolutionWidth + Int64(25)), sum(hits.ResolutionWidth + Int64(26)), sum(hits.ResolutionWidth + Int64(27)), sum(hits.ResolutionWidth + Int64(28)), sum(hits.ResolutionWidth + Int64(29)), sum(hits.ResolutionWidth + Int64(30)), sum(hits.ResolutionWidth + Int64(31)), sum(hits.ResolutionWidth + Int64(32)), sum(hits.ResolutionWidth + Int64(33)), sum(hits.ResolutionWidth + Int64(34)), sum(hits.ResolutionWidth + Int64(35)), sum(hits.ResolutionWidth + Int64(36)), sum(hits.ResolutionWidth + Int64(37)), sum(hits.ResolutionWidth + Int64(38)), sum(hits.ResolutionWidth + Int64(39)), sum(hits.ResolutionWidth + Int64(40)), sum(hits.ResolutionWidth + Int64(41)), sum(hits.ResolutionWidth + Int64(42)), sum(hits.ResolutionWidth + Int64(43)), sum(hits.ResolutionWidth + Int64(44)), sum(hits.ResolutionWidth + Int64(45)), sum(hits.ResolutionWidth + Int64(46)), sum(hits.ResolutionWidth + Int64(47)), sum(hits.ResolutionWidth + Int64(48)), sum(hits.ResolutionWidth + Int64(49)), sum(hits.ResolutionWidth + Int64(50)), sum(hits.ResolutionWidth + Int64(51)), sum(hits.ResolutionWidth + Int64(52)), sum(hits.ResolutionWidth + Int64(53)), sum(hits.ResolutionWidth + Int64(54)), sum(hits.ResolutionWidth + Int64(55)), sum(hits.ResolutionWidth + Int64(56)), sum(hits.ResolutionWidth + Int64(57)), sum(hits.ResolutionWidth + Int64(58)), sum(hits.ResolutionWidth + Int64(59)), sum(hits.ResolutionWidth + Int64(60)), sum(hits.ResolutionWidth + Int64(61)), sum(hits.ResolutionWidth + Int64(62)), sum(hits.ResolutionWidth + Int64(63)), sum(hits.ResolutionWidth + Int64(64)), sum(hits.ResolutionWidth + Int64(65)), sum(hits.ResolutionWidth + Int64(66)), sum(hits.ResolutionWidth + Int64(67)), sum(hits.ResolutionWidth + Int64(68)), sum(hits.ResolutionWidth + Int64(69)), sum(hits.ResolutionWidth + Int64(70)), sum(hits.ResolutionWidth + Int64(71)), sum(hits.ResolutionWidth + Int64(72)), sum(hits.ResolutionWidth + Int64(73)), sum(hits.ResolutionWidth + Int64(74)), sum(hits.ResolutionWidth + Int64(75)), sum(hits.ResolutionWidth + Int64(76)), sum(hits.ResolutionWidth + Int64(77)), sum(hits.ResolutionWidth + Int64(78)), sum(hits.ResolutionWidth + Int64(79)), sum(hits.ResolutionWidth + Int64(80)), sum(hits.ResolutionWidth + Int64(81)), sum(hits.ResolutionWidth + Int64(82)), sum(hits.ResolutionWidth + Int64(83)), sum(hits.ResolutionWidth + Int64(84)), sum(hits.ResolutionWidth + Int64(85)), sum(hits.ResolutionWidth + Int64(86)), sum(hits.ResolutionWidth + Int64(87)), sum(hits.ResolutionWidth + Int64(88)), sum(hits.ResolutionWidth + Int64(89))]] | +| | TableScan: hits projection=[ResolutionWidth] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT sum(hits.ResolutionWidth), sum((hits.ResolutionWidth + 1)), sum((hits.ResolutionWidth + 2)), sum((hits.ResolutionWidth + 3)), sum((hits.ResolutionWidth + 4)), sum((hits.ResolutionWidth + 5)), sum((hits.ResolutionWidth + 6)), sum((hits.ResolutionWidth + 7)), sum((hits.ResolutionWidth + 8)), sum((hits.ResolutionWidth + 9)), sum((hits.ResolutionWidth + 10)), sum((hits.ResolutionWidth + 11)), sum((hits.ResolutionWidth + 12)), sum((hits.ResolutionWidth + 13)), sum((hits.ResolutionWidth + 14)), sum((hits.ResolutionWidth + 15)), sum((hits.ResolutionWidth + 16)), sum((hits.ResolutionWidth + 17)), sum((hits.ResolutionWidth + 18)), sum((hits.ResolutionWidth + 19)), sum((hits.ResolutionWidth + 20)), sum((hits.ResolutionWidth + 21)), sum((hits.ResolutionWidth + 22)), sum((hits.ResolutionWidth + 23)), sum((hits.ResolutionWidth + 24)), sum((hits.ResolutionWidth + 25)), sum((hits.ResolutionWidth + 26)), sum((hits.ResolutionWidth + 27)), sum((hits.ResolutionWidth + 28)), sum((hits.ResolutionWidth + 29)), sum((hits.ResolutionWidth + 30)), sum((hits.ResolutionWidth + 31)), sum((hits.ResolutionWidth + 32)), sum((hits.ResolutionWidth + 33)), sum((hits.ResolutionWidth + 34)), sum((hits.ResolutionWidth + 35)), sum((hits.ResolutionWidth + 36)), sum((hits.ResolutionWidth + 37)), sum((hits.ResolutionWidth + 38)), sum((hits.ResolutionWidth + 39)), sum((hits.ResolutionWidth + 40)), sum((hits.ResolutionWidth + 41)), sum((hits.ResolutionWidth + 42)), sum((hits.ResolutionWidth + 43)), sum((hits.ResolutionWidth + 44)), sum((hits.ResolutionWidth + 45)), sum((hits.ResolutionWidth + 46)), sum((hits.ResolutionWidth + 47)), sum((hits.ResolutionWidth + 48)), sum((hits.ResolutionWidth + 49)), sum((hits.ResolutionWidth + 50)), sum((hits.ResolutionWidth + 51)), sum((hits.ResolutionWidth + 52)), sum((hits.ResolutionWidth + 53)), sum((hits.ResolutionWidth + 54)), sum((hits.ResolutionWidth + 55)), sum((hits.ResolutionWidth + 56)), sum((hits.ResolutionWidth + 57)), sum((hits.ResolutionWidth + 58)), sum((hits.ResolutionWidth + 59)), sum((hits.ResolutionWidth + 60)), sum((hits.ResolutionWidth + 61)), sum((hits.ResolutionWidth + 62)), sum((hits.ResolutionWidth + 63)), sum((hits.ResolutionWidth + 64)), sum((hits.ResolutionWidth + 65)), sum((hits.ResolutionWidth + 66)), sum((hits.ResolutionWidth + 67)), sum((hits.ResolutionWidth + 68)), sum((hits.ResolutionWidth + 69)), sum((hits.ResolutionWidth + 70)), sum((hits.ResolutionWidth + 71)), sum((hits.ResolutionWidth + 72)), sum((hits.ResolutionWidth + 73)), sum((hits.ResolutionWidth + 74)), sum((hits.ResolutionWidth + 75)), sum((hits.ResolutionWidth + 76)), sum((hits.ResolutionWidth + 77)), sum((hits.ResolutionWidth + 78)), sum((hits.ResolutionWidth + 79)), sum((hits.ResolutionWidth + 80)), sum((hits.ResolutionWidth + 81)), sum((hits.ResolutionWidth + 82)), sum((hits.ResolutionWidth + 83)), sum((hits.ResolutionWidth + 84)), sum((hits.ResolutionWidth + 85)), sum((hits.ResolutionWidth + 86)), sum((hits.ResolutionWidth + 87)), sum((hits.ResolutionWidth + 88)), sum((hits.ResolutionWidth + 89)) FROM hits rewritten_sql=SELECT sum(`hits`.`ResolutionWidth`), sum((`hits`.`ResolutionWidth` + 1)), sum((`hits`.`ResolutionWidth` + 2)), sum((`hits`.`ResolutionWidth` + 3)), sum((`hits`.`ResolutionWidth` + 4)), sum((`hits`.`ResolutionWidth` + 5)), sum((`hits`.`ResolutionWidth` + 6)), sum((`hits`.`ResolutionWidth` + 7)), sum((`hits`.`ResolutionWidth` + 8)), sum((`hits`.`ResolutionWidth` + 9)), sum((`hits`.`ResolutionWidth` + 10)), sum((`hits`.`ResolutionWidth` + 11)), sum((`hits`.`ResolutionWidth` + 12)), sum((`hits`.`ResolutionWidth` + 13)), sum((`hits`.`ResolutionWidth` + 14)), sum((`hits`.`ResolutionWidth` + 15)), sum((`hits`.`ResolutionWidth` + 16)), sum((`hits`.`ResolutionWidth` + 17)), sum((`hits`.`ResolutionWidth` + 18)), sum((`hits`.`ResolutionWidth` + 19)), sum((`hits`.`ResolutionWidth` + 20)), sum((`hits`.`ResolutionWidth` + 21)), sum((`hits`.`ResolutionWidth` + 22)), sum((`hits`.`ResolutionWidth` + 23)), sum((`hits`.`ResolutionWidth` + 24)), sum((`hits`.`ResolutionWidth` + 25)), sum((`hits`.`ResolutionWidth` + 26)), sum((`hits`.`ResolutionWidth` + 27)), sum((`hits`.`ResolutionWidth` + 28)), sum((`hits`.`ResolutionWidth` + 29)), sum((`hits`.`ResolutionWidth` + 30)), sum((`hits`.`ResolutionWidth` + 31)), sum((`hits`.`ResolutionWidth` + 32)), sum((`hits`.`ResolutionWidth` + 33)), sum((`hits`.`ResolutionWidth` + 34)), sum((`hits`.`ResolutionWidth` + 35)), sum((`hits`.`ResolutionWidth` + 36)), sum((`hits`.`ResolutionWidth` + 37)), sum((`hits`.`ResolutionWidth` + 38)), sum((`hits`.`ResolutionWidth` + 39)), sum((`hits`.`ResolutionWidth` + 40)), sum((`hits`.`ResolutionWidth` + 41)), sum((`hits`.`ResolutionWidth` + 42)), sum((`hits`.`ResolutionWidth` + 43)), sum((`hits`.`ResolutionWidth` + 44)), sum((`hits`.`ResolutionWidth` + 45)), sum((`hits`.`ResolutionWidth` + 46)), sum((`hits`.`ResolutionWidth` + 47)), sum((`hits`.`ResolutionWidth` + 48)), sum((`hits`.`ResolutionWidth` + 49)), sum((`hits`.`ResolutionWidth` + 50)), sum((`hits`.`ResolutionWidth` + 51)), sum((`hits`.`ResolutionWidth` + 52)), sum((`hits`.`ResolutionWidth` + 53)), sum((`hits`.`ResolutionWidth` + 54)), sum((`hits`.`ResolutionWidth` + 55)), sum((`hits`.`ResolutionWidth` + 56)), sum((`hits`.`ResolutionWidth` + 57)), sum((`hits`.`ResolutionWidth` + 58)), sum((`hits`.`ResolutionWidth` + 59)), sum((`hits`.`ResolutionWidth` + 60)), sum((`hits`.`ResolutionWidth` + 61)), sum((`hits`.`ResolutionWidth` + 62)), sum((`hits`.`ResolutionWidth` + 63)), sum((`hits`.`ResolutionWidth` + 64)), sum((`hits`.`ResolutionWidth` + 65)), sum((`hits`.`ResolutionWidth` + 66)), sum((`hits`.`ResolutionWidth` + 67)), sum((`hits`.`ResolutionWidth` + 68)), sum((`hits`.`ResolutionWidth` + 69)), sum((`hits`.`ResolutionWidth` + 70)), sum((`hits`.`ResolutionWidth` + 71)), sum((`hits`.`ResolutionWidth` + 72)), sum((`hits`.`ResolutionWidth` + 73)), sum((`hits`.`ResolutionWidth` + 74)), sum((`hits`.`ResolutionWidth` + 75)), sum((`hits`.`ResolutionWidth` + 76)), sum((`hits`.`ResolutionWidth` + 77)), sum((`hits`.`ResolutionWidth` + 78)), sum((`hits`.`ResolutionWidth` + 79)), sum((`hits`.`ResolutionWidth` + 80)), sum((`hits`.`ResolutionWidth` + 81)), sum((`hits`.`ResolutionWidth` + 82)), sum((`hits`.`ResolutionWidth` + 83)), sum((`hits`.`ResolutionWidth` + 84)), sum((`hits`.`ResolutionWidth` + 85)), sum((`hits`.`ResolutionWidth` + 86)), sum((`hits`.`ResolutionWidth` + 87)), sum((`hits`.`ResolutionWidth` + 88)), sum((`hits`.`ResolutionWidth` + 89)) FROM `hits` | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q31_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q31_explain.snap new file mode 100644 index 0000000000..14e7655968 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q31_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q31" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.SearchEngineID, hits.ClientIP, count(*) AS c, sum(hits.IsRefresh), avg(hits.ResolutionWidth) | +| | Aggregate: groupBy=[[hits.SearchEngineID, hits.ClientIP]], aggr=[[count(*), sum(hits.IsRefresh), avg(hits.ResolutionWidth)]] | +| | TableScan: hits projection=[ClientIP, IsRefresh, ResolutionWidth, SearchEngineID], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.SearchEngineID, hits.ClientIP, count(*) AS c, sum(hits.IsRefresh), avg(hits.ResolutionWidth) FROM hits WHERE (hits.SearchPhrase <> '') GROUP BY hits.SearchEngineID, hits.ClientIP ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`SearchEngineID`, `hits`.`ClientIP`, count(*) AS `c`, sum(`hits`.`IsRefresh`), avg(`hits`.`ResolutionWidth`) FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') GROUP BY `hits`.`SearchEngineID`, `hits`.`ClientIP` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q32_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q32_explain.snap new file mode 100644 index 0000000000..a366a75fa3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q32_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q32" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.WatchID, hits.ClientIP, count(*) AS c, sum(hits.IsRefresh), avg(hits.ResolutionWidth) | +| | Aggregate: groupBy=[[hits.WatchID, hits.ClientIP]], aggr=[[count(*), sum(hits.IsRefresh), avg(hits.ResolutionWidth)]] | +| | TableScan: hits projection=[WatchID, ClientIP, IsRefresh, ResolutionWidth], full_filters=[hits.SearchPhrase != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.WatchID, hits.ClientIP, count(*) AS c, sum(hits.IsRefresh), avg(hits.ResolutionWidth) FROM hits WHERE (hits.SearchPhrase <> '') GROUP BY hits.WatchID, hits.ClientIP ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`WatchID`, `hits`.`ClientIP`, count(*) AS `c`, sum(`hits`.`IsRefresh`), avg(`hits`.`ResolutionWidth`) FROM `hits` WHERE (`hits`.`SearchPhrase` <> '') GROUP BY `hits`.`WatchID`, `hits`.`ClientIP` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q33_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q33_explain.snap new file mode 100644 index 0000000000..505cee8b8e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q33_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q33" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.WatchID, hits.ClientIP, count(*) AS c, sum(hits.IsRefresh), avg(hits.ResolutionWidth) | +| | Aggregate: groupBy=[[hits.WatchID, hits.ClientIP]], aggr=[[count(*), sum(hits.IsRefresh), avg(hits.ResolutionWidth)]] | +| | TableScan: hits projection=[WatchID, ClientIP, IsRefresh, ResolutionWidth] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.WatchID, hits.ClientIP, count(*) AS c, sum(hits.IsRefresh), avg(hits.ResolutionWidth) FROM hits GROUP BY hits.WatchID, hits.ClientIP ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`WatchID`, `hits`.`ClientIP`, count(*) AS `c`, sum(`hits`.`IsRefresh`), avg(`hits`.`ResolutionWidth`) FROM `hits` GROUP BY `hits`.`WatchID`, `hits`.`ClientIP` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q34_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q34_explain.snap new file mode 100644 index 0000000000..8178e96817 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q34_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q34" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.URL, count(*) AS c | +| | Aggregate: groupBy=[[hits.URL]], aggr=[[count(*)]] | +| | TableScan: hits projection=[URL] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits."URL", count(*) AS c FROM hits GROUP BY hits."URL" ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`URL`, count(*) AS `c` FROM `hits` GROUP BY `hits`.`URL` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q35_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q35_explain.snap new file mode 100644 index 0000000000..68d52c0c81 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q35_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q35" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: Int64(1), hits.URL, count(*) AS c | +| | Aggregate: groupBy=[[Int64(1), hits.URL]], aggr=[[count(*)]] | +| | TableScan: hits projection=[URL] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT 1, hits."URL", count(*) AS c FROM hits GROUP BY 1, hits."URL" ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT 1, `hits`.`URL`, count(*) AS `c` FROM `hits` GROUP BY 1, `hits`.`URL` ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q36_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q36_explain.snap new file mode 100644 index 0000000000..02a5c7afe3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q36_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q36" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: c DESC NULLS FIRST | +| | Projection: hits.ClientIP, hits.ClientIP - Int64(1), hits.ClientIP - Int64(2), hits.ClientIP - Int64(3), count(*) AS c | +| | Aggregate: groupBy=[[hits.ClientIP, hits.ClientIP - Int64(1), hits.ClientIP - Int64(2), hits.ClientIP - Int64(3)]], aggr=[[count(*)]] | +| | TableScan: hits projection=[ClientIP] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.ClientIP, (hits.ClientIP - 1), (hits.ClientIP - 2), (hits.ClientIP - 3), count(*) AS c FROM hits GROUP BY hits.ClientIP, (hits.ClientIP - 1), (hits.ClientIP - 2), (hits.ClientIP - 3) ORDER BY c DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`ClientIP`, (`hits`.`ClientIP` - 1), (`hits`.`ClientIP` - 2), (`hits`.`ClientIP` - 3), count(*) AS `c` FROM `hits` GROUP BY `hits`.`ClientIP`, (`hits`.`ClientIP` - 1), (`hits`.`ClientIP` - 2), (`hits`.`ClientIP` - 3) ORDER BY `c` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q37_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q37_explain.snap new file mode 100644 index 0000000000..deaee88dd5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q37_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q37" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: PageViews DESC NULLS FIRST | +| | Projection: hits.URL, count(*) AS PageViews | +| | Aggregate: groupBy=[[hits.URL]], aggr=[[count(*)]] | +| | TableScan: hits projection=[URL], full_filters=[hits.CounterID = Int64(62), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) >= Utf8("2013-07-01"), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) <= Utf8("2013-07-31"), hits.DontCountHits = Int64(0), hits.IsRefresh = Int64(0), hits.URL != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits."URL", count(*) AS PageViews FROM hits WHERE ((((((hits.CounterID = 62) AND (date_trunc('day', from_unixtime(hits.EventTime)) >= '2013-07-01')) AND (date_trunc('day', from_unixtime(hits.EventTime)) <= '2013-07-31')) AND (hits.DontCountHits = 0)) AND (hits.IsRefresh = 0)) AND (hits."URL" <> '')) GROUP BY hits."URL" ORDER BY PageViews DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`URL`, count(*) AS `PageViews` FROM `hits` WHERE ((((((`hits`.`CounterID` = 62) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) >= '2013-07-01')) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) <= '2013-07-31')) AND (`hits`.`DontCountHits` = 0)) AND (`hits`.`IsRefresh` = 0)) AND (`hits`.`URL` <> '')) GROUP BY `hits`.`URL` ORDER BY `PageViews` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q38_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q38_explain.snap new file mode 100644 index 0000000000..c4abd6ee93 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q38_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q38" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: PageViews DESC NULLS FIRST | +| | Projection: hits.Title, count(*) AS PageViews | +| | Aggregate: groupBy=[[hits.Title]], aggr=[[count(*)]] | +| | TableScan: hits projection=[Title], full_filters=[hits.CounterID = Int64(62), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) >= Utf8("2013-07-01"), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) <= Utf8("2013-07-31"), hits.DontCountHits = Int64(0), hits.IsRefresh = Int64(0), hits.Title != Utf8("")] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.Title, count(*) AS PageViews FROM hits WHERE ((((((hits.CounterID = 62) AND (date_trunc('day', from_unixtime(hits.EventTime)) >= '2013-07-01')) AND (date_trunc('day', from_unixtime(hits.EventTime)) <= '2013-07-31')) AND (hits.DontCountHits = 0)) AND (hits.IsRefresh = 0)) AND (hits.Title <> '')) GROUP BY hits.Title ORDER BY PageViews DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`Title`, count(*) AS `PageViews` FROM `hits` WHERE ((((((`hits`.`CounterID` = 62) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) >= '2013-07-01')) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) <= '2013-07-31')) AND (`hits`.`DontCountHits` = 0)) AND (`hits`.`IsRefresh` = 0)) AND (`hits`.`Title` <> '')) GROUP BY `hits`.`Title` ORDER BY `PageViews` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q39_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q39_explain.snap new file mode 100644 index 0000000000..97a1a75c85 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q39_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q39" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=1000, fetch=10 | +| | Sort: PageViews DESC NULLS FIRST | +| | Projection: hits.URL, count(*) AS PageViews | +| | Aggregate: groupBy=[[hits.URL]], aggr=[[count(*)]] | +| | TableScan: hits projection=[URL], full_filters=[hits.CounterID = Int64(62), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) >= Utf8("2013-07-01"), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) <= Utf8("2013-07-31"), hits.IsRefresh = Int64(0), hits.IsLink != Int64(0), hits.IsDownload = Int64(0)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits."URL", count(*) AS PageViews FROM hits WHERE ((((((hits.CounterID = 62) AND (date_trunc('day', from_unixtime(hits.EventTime)) >= '2013-07-01')) AND (date_trunc('day', from_unixtime(hits.EventTime)) <= '2013-07-31')) AND (hits.IsRefresh = 0)) AND (hits.IsLink <> 0)) AND (hits.IsDownload = 0)) GROUP BY hits."URL" ORDER BY PageViews DESC NULLS FIRST LIMIT 10 OFFSET 1000 rewritten_sql=SELECT `hits`.`URL`, count(*) AS `PageViews` FROM `hits` WHERE ((((((`hits`.`CounterID` = 62) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) >= '2013-07-01')) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) <= '2013-07-31')) AND (`hits`.`IsRefresh` = 0)) AND (`hits`.`IsLink` <> 0)) AND (`hits`.`IsDownload` = 0)) GROUP BY `hits`.`URL` ORDER BY `PageViews` DESC NULLS FIRST LIMIT 10 OFFSET 1000 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q3_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q3_explain.snap new file mode 100644 index 0000000000..8f08b7cb12 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q3_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q3" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: sum(hits.AdvEngineID), count(*), avg(hits.ResolutionWidth) | +| | Aggregate: groupBy=[[]], aggr=[[sum(hits.AdvEngineID), count(*), avg(hits.ResolutionWidth)]] | +| | TableScan: hits projection=[ResolutionWidth, AdvEngineID] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT sum(hits.AdvEngineID), count(*), avg(hits.ResolutionWidth) FROM hits rewritten_sql=SELECT sum(`hits`.`AdvEngineID`), count(*), avg(`hits`.`ResolutionWidth`) FROM `hits` | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q40_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q40_explain.snap new file mode 100644 index 0000000000..fb296633f5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q40_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q40" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=1000, fetch=10 | +| | Sort: PageViews DESC NULLS FIRST | +| | Projection: hits.TraficSourceID, hits.SearchEngineID, hits.AdvEngineID, CASE WHEN hits.SearchEngineID = Int64(0) AND hits.AdvEngineID = Int64(0) THEN hits.Referer ELSE Utf8("") END AS Src, hits.URL AS Dst, count(*) AS PageViews | +| | Aggregate: groupBy=[[hits.TraficSourceID, hits.SearchEngineID, hits.AdvEngineID, CASE WHEN hits.SearchEngineID = Int64(0) AND hits.AdvEngineID = Int64(0) THEN hits.Referer ELSE Utf8("") END, hits.URL]], aggr=[[count(*)]] | +| | TableScan: hits projection=[URL, Referer, TraficSourceID, SearchEngineID, AdvEngineID], full_filters=[hits.CounterID = Int64(62), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) >= Utf8("2013-07-01"), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) <= Utf8("2013-07-31"), hits.IsRefresh = Int64(0)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.TraficSourceID, hits.SearchEngineID, hits.AdvEngineID, CASE WHEN ((hits.SearchEngineID = 0) AND (hits.AdvEngineID = 0)) THEN hits.Referer ELSE '' END AS Src, hits."URL" AS Dst, count(*) AS PageViews FROM hits WHERE ((((hits.CounterID = 62) AND (date_trunc('day', from_unixtime(hits.EventTime)) >= '2013-07-01')) AND (date_trunc('day', from_unixtime(hits.EventTime)) <= '2013-07-31')) AND (hits.IsRefresh = 0)) GROUP BY hits.TraficSourceID, hits.SearchEngineID, hits.AdvEngineID, CASE WHEN ((hits.SearchEngineID = 0) AND (hits.AdvEngineID = 0)) THEN hits.Referer ELSE '' END, hits."URL" ORDER BY PageViews DESC NULLS FIRST LIMIT 10 OFFSET 1000 rewritten_sql=SELECT `hits`.`TraficSourceID`, `hits`.`SearchEngineID`, `hits`.`AdvEngineID`, CASE WHEN ((`hits`.`SearchEngineID` = 0) AND (`hits`.`AdvEngineID` = 0)) THEN `hits`.`Referer` ELSE '' END AS `Src`, `hits`.`URL` AS `Dst`, count(*) AS `PageViews` FROM `hits` WHERE ((((`hits`.`CounterID` = 62) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) >= '2013-07-01')) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) <= '2013-07-31')) AND (`hits`.`IsRefresh` = 0)) GROUP BY `hits`.`TraficSourceID`, `hits`.`SearchEngineID`, `hits`.`AdvEngineID`, CASE WHEN ((`hits`.`SearchEngineID` = 0) AND (`hits`.`AdvEngineID` = 0)) THEN `hits`.`Referer` ELSE '' END, `hits`.`URL` ORDER BY `PageViews` DESC NULLS FIRST LIMIT 10 OFFSET 1000 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q41_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q41_explain.snap new file mode 100644 index 0000000000..f9747cff56 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q41_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q41" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=100, fetch=10 | +| | Sort: PageViews DESC NULLS FIRST | +| | Projection: hits.URLHash, date_trunc(Utf8("day"),from_unixtime(hits.EventTime)), count(*) AS PageViews | +| | Aggregate: groupBy=[[hits.URLHash, date_trunc(Utf8("day"), from_unixtime(hits.EventTime))]], aggr=[[count(*)]] | +| | TableScan: hits projection=[EventTime, URLHash], full_filters=[hits.CounterID = Int64(62), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) >= Utf8("2013-07-01"), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) <= Utf8("2013-07-31"), hits.IsRefresh = Int64(0), hits.TraficSourceID IN ([Int64(-1), Int64(6)]), hits.RefererHash = Int64(3594120000172545465)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.URLHash, date_trunc('day', from_unixtime(hits.EventTime)), count(*) AS PageViews FROM hits WHERE ((((((hits.CounterID = 62) AND (date_trunc('day', from_unixtime(hits.EventTime)) >= '2013-07-01')) AND (date_trunc('day', from_unixtime(hits.EventTime)) <= '2013-07-31')) AND (hits.IsRefresh = 0)) AND hits.TraficSourceID IN (-1, 6)) AND (hits.RefererHash = 3594120000172545465)) GROUP BY hits.URLHash, date_trunc('day', from_unixtime(hits.EventTime)) ORDER BY PageViews DESC NULLS FIRST LIMIT 10 OFFSET 100 rewritten_sql=SELECT `hits`.`URLHash`, strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')), count(*) AS `PageViews` FROM `hits` WHERE ((((((`hits`.`CounterID` = 62) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) >= '2013-07-01')) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) <= '2013-07-31')) AND (`hits`.`IsRefresh` = 0)) AND `hits`.`TraficSourceID` IN (-1, 6)) AND (`hits`.`RefererHash` = 3594120000172545465)) GROUP BY `hits`.`URLHash`, strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) ORDER BY `PageViews` DESC NULLS FIRST LIMIT 10 OFFSET 100 | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q42_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q42_explain.snap new file mode 100644 index 0000000000..9cea6b1723 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q42_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q42" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=10000, fetch=10 | +| | Sort: PageViews DESC NULLS FIRST | +| | Projection: hits.WindowClientWidth, hits.WindowClientHeight, count(*) AS PageViews | +| | Aggregate: groupBy=[[hits.WindowClientWidth, hits.WindowClientHeight]], aggr=[[count(*)]] | +| | TableScan: hits projection=[WindowClientWidth, WindowClientHeight], full_filters=[hits.CounterID = Int64(62), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) >= Utf8("2013-07-01"), date_trunc(Utf8("day"), from_unixtime(hits.EventTime)) <= Utf8("2013-07-31"), hits.IsRefresh = Int64(0), hits.DontCountHits = Int64(0), hits.URLHash = Int64(2868770270353813622)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.WindowClientWidth, hits.WindowClientHeight, count(*) AS PageViews FROM hits WHERE ((((((hits.CounterID = 62) AND (date_trunc('day', from_unixtime(hits.EventTime)) >= '2013-07-01')) AND (date_trunc('day', from_unixtime(hits.EventTime)) <= '2013-07-31')) AND (hits.IsRefresh = 0)) AND (hits.DontCountHits = 0)) AND (hits.URLHash = 2868770270353813622)) GROUP BY hits.WindowClientWidth, hits.WindowClientHeight ORDER BY PageViews DESC NULLS FIRST LIMIT 10 OFFSET 10000 rewritten_sql=SELECT `hits`.`WindowClientWidth`, `hits`.`WindowClientHeight`, count(*) AS `PageViews` FROM `hits` WHERE ((((((`hits`.`CounterID` = 62) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) >= '2013-07-01')) AND (strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch')) <= '2013-07-31')) AND (`hits`.`IsRefresh` = 0)) AND (`hits`.`DontCountHits` = 0)) AND (`hits`.`URLHash` = 2868770270353813622)) GROUP BY `hits`.`WindowClientWidth`, `hits`.`WindowClientHeight` ORDER BY `PageViews` DESC NULLS FIRST LIMIT 10 OFFSET 10000 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q43_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q43_explain.snap new file mode 100644 index 0000000000..0629b5bbc6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q43_explain.snap @@ -0,0 +1,20 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q43" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=1000, fetch=10 | +| | Projection: M, PageViews | +| | Sort: date_part(Utf8("minute"),from_unixtime(hits.EventTime)) AS M ASC NULLS LAST | +| | Projection: date_part(Utf8("minute"),from_unixtime(hits.EventTime)) AS M, count(*) AS PageViews, date_part(Utf8("minute"),from_unixtime(hits.EventTime)) | +| | Aggregate: groupBy=[[date_part(Utf8("minute"), from_unixtime(hits.EventTime))]], aggr=[[count(*)]] | +| | TableScan: hits projection=[EventTime], full_filters=[hits.CounterID = Int64(62), hits.EventDate >= Utf8("2013-07-14"), hits.EventDate <= Utf8("2013-07-15"), hits.IsRefresh = Int64(0), hits.DontCountHits = Int64(0)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT M, PageViews FROM (SELECT date_part('minute', from_unixtime(hits.EventTime)) AS M, count(*) AS PageViews, date_part('minute', from_unixtime(hits.EventTime)) FROM hits WHERE (((((hits.CounterID = 62) AND (hits.EventDate >= '2013-07-14')) AND (hits.EventDate <= '2013-07-15')) AND (hits.IsRefresh = 0)) AND (hits.DontCountHits = 0)) GROUP BY date_part('minute', from_unixtime(hits.EventTime)) ORDER BY date_part('minute', from_unixtime(hits.EventTime)) ASC NULLS LAST) LIMIT 10 OFFSET 1000 rewritten_sql=SELECT `M`, `PageViews` FROM (SELECT strftime('%M', datetime(`hits`.`EventTime`, 'unixepoch')) AS `M`, count(*) AS `PageViews`, strftime('%M', datetime(`hits`.`EventTime`, 'unixepoch')) FROM `hits` WHERE (((((`hits`.`CounterID` = 62) AND (`hits`.`EventDate` >= '2013-07-14')) AND (`hits`.`EventDate` <= '2013-07-15')) AND (`hits`.`IsRefresh` = 0)) AND (`hits`.`DontCountHits` = 0)) GROUP BY strftime('%M', datetime(`hits`.`EventTime`, 'unixepoch')) ORDER BY strftime('%M', datetime(`hits`.`EventTime`, 'unixepoch')) ASC NULLS LAST) LIMIT 10 OFFSET 1000 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q4_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q4_explain.snap new file mode 100644 index 0000000000..9ef2fbc3a7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q4_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q4" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: avg(hits.UserID) | +| | Aggregate: groupBy=[[]], aggr=[[avg(hits.UserID)]] | +| | TableScan: hits projection=[UserID] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT avg(hits.UserID) FROM hits rewritten_sql=SELECT avg(`hits`.`UserID`) FROM `hits` | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q5_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q5_explain.snap new file mode 100644 index 0000000000..fc35a9a631 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q5_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q5" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: count(DISTINCT hits.UserID) | +| | Aggregate: groupBy=[[]], aggr=[[count(DISTINCT hits.UserID)]] | +| | TableScan: hits projection=[UserID] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT count(DISTINCT hits.UserID) FROM hits rewritten_sql=SELECT count(DISTINCT `hits`.`UserID`) FROM `hits` | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q6_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q6_explain.snap new file mode 100644 index 0000000000..cad2e04255 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q6_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q6" +--- ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: count(DISTINCT hits.SearchPhrase) | +| | Aggregate: groupBy=[[]], aggr=[[count(DISTINCT hits.SearchPhrase)]] | +| | TableScan: hits projection=[SearchPhrase] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT count(DISTINCT hits.SearchPhrase) FROM hits rewritten_sql=SELECT count(DISTINCT `hits`.`SearchPhrase`) FROM `hits` | +| | | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q7_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q7_explain.snap new file mode 100644 index 0000000000..79e0e40a3f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q7_explain.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q7" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Projection: min(date_trunc(Utf8("day"),from_unixtime(hits.EventTime))), max(date_trunc(Utf8("day"),from_unixtime(hits.EventTime))) | +| | Aggregate: groupBy=[[]], aggr=[[min(date_trunc(Utf8("day"), from_unixtime(hits.EventTime))), max(date_trunc(Utf8("day"), from_unixtime(hits.EventTime)))]] | +| | TableScan: hits projection=[EventTime] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT min(date_trunc('day', from_unixtime(hits.EventTime))), max(date_trunc('day', from_unixtime(hits.EventTime))) FROM hits rewritten_sql=SELECT min(strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch'))), max(strftime('%Y-%m-%d', datetime(`hits`.`EventTime`, 'unixepoch'))) FROM `hits` | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q8_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q8_explain.snap new file mode 100644 index 0000000000..c6ca3c0a95 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q8_explain.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q8" +--- ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Sort: count(*) DESC NULLS FIRST | +| | Projection: hits.AdvEngineID, count(*) | +| | Aggregate: groupBy=[[hits.AdvEngineID]], aggr=[[count(*)]] | +| | TableScan: hits projection=[AdvEngineID], full_filters=[hits.AdvEngineID != Int64(0)] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.AdvEngineID, count(*) FROM hits WHERE (hits.AdvEngineID <> 0) GROUP BY hits.AdvEngineID ORDER BY count(*) DESC NULLS FIRST rewritten_sql=SELECT `hits`.`AdvEngineID`, count(*) FROM `hits` WHERE (`hits`.`AdvEngineID` <> 0) GROUP BY `hits`.`AdvEngineID` ORDER BY count(*) DESC NULLS FIRST | +| | | ++---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q9_explain.snap b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q9_explain.snap new file mode 100644 index 0000000000..b2ad23b2ac --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/explain/test_framework__snapshot__s3[parquet]-sqlite[memory]_clickbench_q9_explain.snap @@ -0,0 +1,19 @@ +--- +source: crates/test-framework/src/snapshot/mod.rs +description: "Query: clickbench_q9" +--- ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| plan_type | plan | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| logical_plan | BytesProcessedNode | +| | Federated | +| | Limit: skip=0, fetch=10 | +| | Sort: u DESC NULLS FIRST | +| | Projection: hits.RegionID, count(DISTINCT hits.UserID) AS u | +| | Aggregate: groupBy=[[hits.RegionID]], aggr=[[count(DISTINCT hits.UserID)]] | +| | TableScan: hits projection=[RegionID, UserID] | +| physical_plan | BytesProcessedExec | +| | SchemaCastScanExec | +| | VirtualExecutionPlan name=sqlite compute_context=memory sql=SELECT hits.RegionID, count(DISTINCT hits.UserID) AS u FROM hits GROUP BY hits.RegionID ORDER BY u DESC NULLS FIRST LIMIT 10 rewritten_sql=SELECT `hits`.`RegionID`, count(DISTINCT `hits`.`UserID`) AS `u` FROM `hits` GROUP BY `hits`.`RegionID` ORDER BY `u` DESC NULLS FIRST LIMIT 10 | +| | | ++---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__abfs[parquet]-federated_tpcds_q25.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__abfs[parquet]-federated_tpcds_q25.snap new file mode 100644 index 0000000000..e17b20f102 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__abfs[parquet]-federated_tpcds_q25.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q25" +--- ++------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+--------------+--------------------+--------------------+----------------------+ +| i_item_id | i_item_desc | s_store_id | s_store_name | store_sales_profit | store_returns_loss | catalog_sales_profit | ++------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+--------------+--------------------+--------------------+----------------------+ +| AAAAAAAAMMABAAAA | Dead, social pupils will like brightly; languages meet usually results. Sure, strong causes shall offset nervously good languages. Poor, hungry governments would not start still terms. Arrangem | AAAAAAAAEAAAAAAA | ese | -145.81 | 72.53 | 374.34 | ++------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+--------------+--------------------+--------------------+----------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q1.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q1.snap new file mode 100644 index 0000000000..8e754582d1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q1.snap @@ -0,0 +1,12 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q1" +--- ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ +| l_returnflag | l_linestatus | sum_qty | sum_base_price | sum_disc_price | sum_charge | avg_qty | avg_price | avg_disc | count_order | ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ +| A | F | 37734107.00 | 56586554400.73 | 53758257134.8700 | 55909065222.827692 | 25.522005 | 38273.129734 | 0.049985 | 1478493 | +| N | F | 991417.00 | 1487504710.38 | 1413082168.0541 | 1469649223.194375 | 25.516471 | 38284.467760 | 0.050093 | 38854 | +| N | O | 74476040.00 | 111701729697.74 | 106118230307.6056 | 110367043872.497010 | 25.502226 | 38249.117988 | 0.049996 | 2920374 | +| R | F | 37719753.00 | 56568041380.90 | 53741292684.6040 | 55889619119.831932 | 25.505793 | 38250.854626 | 0.050009 | 1478870 | ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q10.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q10.snap new file mode 100644 index 0000000000..26b9181de4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q10.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q10" +--- ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ +| c_custkey | c_name | revenue | c_acctbal | n_name | c_address | c_phone | c_comment | ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ +| 57040 | Customer#000057040 | 734235.2455 | 632.87 | JAPAN | nICtsILWBB | 22-895-641-3466 | ep. blithely regular foxes promise slyly furiously ironic depend | +| 143347 | Customer#000143347 | 721002.6948 | 2557.47 | EGYPT | ,Q9Ml3w0gvX | 14-742-935-3718 | endencies sleep. slyly express deposits nag carefully around the even tithes. slyly regular | +| 60838 | Customer#000060838 | 679127.3077 | 2454.77 | BRAZIL | VWmQhWweqj5hFpcvhGFBeOY9hJ4m | 12-913-494-9813 | tes. final instructions nag quickly according to | +| 101998 | Customer#000101998 | 637029.5667 | 3790.89 | UNITED KINGDOM | 0,ORojfDdyMca2E2H | 33-593-865-6378 | ost carefully. slyly regular packages cajole about the blithely final ideas. permanently daring deposit | +| 125341 | Customer#000125341 | 633508.0860 | 4983.51 | GERMANY | 9YRcnoUPOM7Sa8xymhsDHdQg | 17-582-695-5962 | ly furiously brave packages. quickly regular dugouts kindle furiously carefully bold theodolites. | +| 25501 | Customer#000025501 | 620269.7849 | 7725.04 | ETHIOPIA | sr4VVVe3xCJQ2oo2QEhi19D,pXqo6kOGaSn2 | 15-874-808-6793 | y ironic foxes hinder according to the furiously permanent dolphins. pending ideas integrate blithely from | +| 115831 | Customer#000115831 | 596423.8672 | 5098.10 | FRANCE | AlMpPnmtGrOFrDMUs5VLo EIA,Cg,Rw5TBuBoKiO | 16-715-386-3788 | unts nag carefully final packages. express theodolites are regular ac | +| 84223 | Customer#000084223 | 594998.0239 | 528.65 | UNITED KINGDOM | Eq51o UpQ4RBr fYTdrZApDsPV4pQyuPq | 33-442-824-8191 | longside of the slyly final deposits. blithely final platelets about the blithely i | +| 54289 | Customer#000054289 | 585603.3918 | 5583.02 | IRAN | x3ouCpz6,pRNVhajr0CCQG1 | 20-834-292-4707 | cajole furiously after the quickly unusual fo | +| 39922 | Customer#000039922 | 584878.1134 | 7321.11 | GERMANY | 2KtWzW,FYkhdWBfobp6SFXWYKjvU9 | 17-147-757-8036 | ironic deposits sublate furiously. carefully regular theodolites along the b | ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q11.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q11.snap new file mode 100644 index 0000000000..0974bf70e5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q11.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q11" +--- ++------------+-------------+ +| ps_partkey | value | ++------------+-------------+ +| 129760 | 17538456.86 | +| 166726 | 16503353.92 | +| 191287 | 16474801.97 | +| 161758 | 16101755.54 | +| 34452 | 15983844.72 | +| 139035 | 15907078.34 | +| 9403 | 15451755.62 | +| 154358 | 15212937.88 | +| 38823 | 15064802.86 | +| 85606 | 15053957.15 | ++------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q12.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q12.snap new file mode 100644 index 0000000000..ef557741c7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q12.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q12" +--- ++------------+-----------------+----------------+ +| l_shipmode | high_line_count | low_line_count | ++------------+-----------------+----------------+ +| MAIL | 6202 | 9324 | +| SHIP | 6200 | 9262 | ++------------+-----------------+----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q13.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q13.snap new file mode 100644 index 0000000000..6e20cea9dc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q13.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q13" +--- ++---------+----------+ +| c_count | custdist | ++---------+----------+ +| 0 | 50004 | +| 10 | 6668 | +| 9 | 6563 | +| 11 | 6004 | +| 8 | 5890 | +| 12 | 5600 | +| 13 | 5029 | +| 19 | 4805 | +| 7 | 4680 | +| 18 | 4531 | ++---------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q14.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q14.snap new file mode 100644 index 0000000000..bb1cf95a03 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q14.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q14" +--- ++-------------------+ +| promo_revenue | ++-------------------+ +| 16.38077862639554 | ++-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q16.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q16.snap new file mode 100644 index 0000000000..33cf0d5df0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q16.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q16" +--- ++----------+--------------------------+--------+--------------+ +| p_brand | p_type | p_size | supplier_cnt | ++----------+--------------------------+--------+--------------+ +| Brand#41 | MEDIUM BRUSHED TIN | 3 | 28 | +| Brand#54 | STANDARD BRUSHED COPPER | 14 | 27 | +| Brand#11 | STANDARD BRUSHED TIN | 23 | 24 | +| Brand#11 | STANDARD BURNISHED BRASS | 36 | 24 | +| Brand#15 | MEDIUM ANODIZED NICKEL | 3 | 24 | +| Brand#15 | SMALL ANODIZED BRASS | 45 | 24 | +| Brand#15 | SMALL BURNISHED NICKEL | 19 | 24 | +| Brand#21 | MEDIUM ANODIZED COPPER | 3 | 24 | +| Brand#22 | SMALL BRUSHED NICKEL | 3 | 24 | +| Brand#22 | SMALL BURNISHED BRASS | 19 | 24 | ++----------+--------------------------+--------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q17.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q17.snap new file mode 100644 index 0000000000..d3ff4d6b5a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q17.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q17" +--- ++-------------------+ +| avg_yearly | ++-------------------+ +| 348406.0542857143 | ++-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q18.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q18.snap new file mode 100644 index 0000000000..e32e26b475 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q18.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q18" +--- ++--------------------+-----------+------------+-------------+--------------+--------------------------+ +| c_name | c_custkey | o_orderkey | o_orderdate | o_totalprice | sum(lineitem.l_quantity) | ++--------------------+-----------+------------+-------------+--------------+--------------------------+ +| Customer#000128120 | 128120 | 4722021 | 1994-04-07 | 544089.09 | 323.00 | +| Customer#000144617 | 144617 | 3043270 | 1997-02-12 | 530604.44 | 317.00 | +| Customer#000013940 | 13940 | 2232932 | 1997-04-13 | 522720.61 | 304.00 | +| Customer#000066790 | 66790 | 2199712 | 1996-09-30 | 515531.82 | 327.00 | +| Customer#000046435 | 46435 | 4745607 | 1997-07-03 | 508047.99 | 309.00 | +| Customer#000015272 | 15272 | 3883783 | 1993-07-28 | 500241.33 | 302.00 | +| Customer#000146608 | 146608 | 3342468 | 1994-06-12 | 499794.58 | 303.00 | +| Customer#000096103 | 96103 | 5984582 | 1992-03-16 | 494398.79 | 312.00 | +| Customer#000024341 | 24341 | 1474818 | 1992-11-15 | 491348.26 | 302.00 | +| Customer#000137446 | 137446 | 5489475 | 1997-05-23 | 487763.25 | 311.00 | ++--------------------+-----------+------------+-------------+--------------+--------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q19.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q19.snap new file mode 100644 index 0000000000..af10cb1f7e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q19.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q19" +--- ++--------------+ +| revenue | ++--------------+ +| 3083843.0578 | ++--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q2.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q2.snap new file mode 100644 index 0000000000..962ec44959 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q2.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q2" +--- ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ +| s_acctbal | s_name | n_name | p_partkey | p_mfgr | s_address | s_phone | s_comment | ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ +| 9938.53 | Supplier#000005359 | UNITED KINGDOM | 185358 | Manufacturer#4 | bgxj2K0w1kJvxYl5mhCfou,W | 33-429-790-6131 | l, ironic instructions cajole | +| 9937.84 | Supplier#000005969 | ROMANIA | 108438 | Manufacturer#1 | rdnmd9c8EG1EIAYY3LPVa4yUNx6OwyVaQ | 29-520-692-3537 | es. furiously silent deposits among the deposits haggle furiously a | +| 9936.22 | Supplier#000005250 | UNITED KINGDOM | 249 | Manufacturer#4 | qX AB0vP8mJEWeBuY9jri | 33-320-228-2957 | ar, regular requests nag blithely special accounts. final deposits impress carefully. ironic, | +| 9923.77 | Supplier#000002324 | GERMANY | 29821 | Manufacturer#4 | uXcnR7tv87dG | 17-779-299-1839 | s sleep according to the quick requests. carefully | +| 9871.22 | Supplier#000006373 | GERMANY | 43868 | Manufacturer#5 | iSLO35z7Ae | 17-813-485-8637 | against the slyly daring requests. unusual accounts wake atop the blithely spe | +| 9870.78 | Supplier#000001286 | GERMANY | 81285 | Manufacturer#2 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9870.78 | Supplier#000001286 | GERMANY | 181285 | Manufacturer#4 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9852.52 | Supplier#000008973 | RUSSIA | 18972 | Manufacturer#2 | zVfUT3Np22kUC05tYWHBotaR | 32-188-594-7038 | ly daring excuses unwind carefully above the fu | +| 9847.83 | Supplier#000008097 | RUSSIA | 130557 | Manufacturer#2 | veMRTQBmUResNvfD3 | 32-375-640-3593 | slyly ironic, special requests. final instructions above the qu | +| 9847.57 | Supplier#000006345 | FRANCE | 86344 | Manufacturer#1 | 68yX tGXAkVRSxUGNSjJdptw 8O878xaFnaoQK | 16-886-766-7945 | odolites. blithely special requests above the regular foxes sleep unusual sauternes. care | ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q20.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q20.snap new file mode 100644 index 0000000000..7bcc73e575 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q20.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q20" +--- ++--------------------+--------------------------------------+ +| s_name | s_address | ++--------------------+--------------------------------------+ +| Supplier#000000020 | JtPqm19E7tF 152Rl1wQZ8j0H | +| Supplier#000000091 | 35WVnU7GLNbQDcc2TARavGtk6RB6ZCd46UAY | +| Supplier#000000205 | Alrx5TN,hdnG | +| Supplier#000000285 | q TMZEDyZtv vUiFKBhT3NJlnIxpL | +| Supplier#000000287 | UQR8bUA4V2HxVbw9K | +| Supplier#000000354 | wSLcCW40Q8 | +| Supplier#000000378 | mLPJtpu4wOc cSFzBR | +| Supplier#000000402 | JR8vWoCteJtJg3okRpt0r28KEo | +| Supplier#000000530 | 0BvoewCPg2scOEfuL93FRKqSxHmdhw1 | +| Supplier#000000555 | 8Lp0QWPLFXrJrX1sTWkAEdzUsh5ke | ++--------------------+--------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q21.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q21.snap new file mode 100644 index 0000000000..f22be1b03e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q21.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q21" +--- ++--------------------+---------+ +| s_name | numwait | ++--------------------+---------+ +| Supplier#000002829 | 20 | +| Supplier#000005808 | 18 | +| Supplier#000000262 | 17 | +| Supplier#000000496 | 17 | +| Supplier#000002160 | 17 | +| Supplier#000002301 | 17 | +| Supplier#000002540 | 17 | +| Supplier#000003063 | 17 | +| Supplier#000005178 | 17 | +| Supplier#000008331 | 17 | ++--------------------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q22.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q22.snap new file mode 100644 index 0000000000..42b3e909ca --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q22.snap @@ -0,0 +1,15 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q22" +--- ++-----------+---------+------------+ +| cntrycode | numcust | totacctbal | ++-----------+---------+------------+ +| 13 | 888 | 6737713.99 | +| 17 | 861 | 6460573.72 | +| 18 | 964 | 7236687.40 | +| 23 | 892 | 6701457.95 | +| 29 | 948 | 7158866.63 | +| 30 | 909 | 6808436.13 | +| 31 | 922 | 6806670.18 | ++-----------+---------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q3.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q3.snap new file mode 100644 index 0000000000..8c5687347d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q3.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q3" +--- ++------------+-------------+-------------+----------------+ +| l_orderkey | revenue | o_orderdate | o_shippriority | ++------------+-------------+-------------+----------------+ +| 2456423 | 406181.0111 | 1995-03-05 | 0 | +| 3459808 | 405838.6989 | 1995-03-04 | 0 | +| 492164 | 390324.0610 | 1995-02-19 | 0 | +| 1188320 | 384537.9359 | 1995-03-09 | 0 | +| 2435712 | 378673.0558 | 1995-02-26 | 0 | +| 4878020 | 378376.7952 | 1995-03-12 | 0 | +| 5521732 | 375153.9215 | 1995-03-13 | 0 | +| 2628192 | 373133.3094 | 1995-02-22 | 0 | +| 993600 | 371407.4595 | 1995-03-05 | 0 | +| 2300070 | 367371.1452 | 1995-03-13 | 0 | ++------------+-------------+-------------+----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q4.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q4.snap new file mode 100644 index 0000000000..c45db96ed8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q4.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q4" +--- ++-----------------+-------------+ +| o_orderpriority | order_count | ++-----------------+-------------+ +| 1-URGENT | 10594 | +| 2-HIGH | 10476 | +| 3-MEDIUM | 10410 | +| 4-NOT SPECIFIED | 10556 | +| 5-LOW | 10487 | ++-----------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q5.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q5.snap new file mode 100644 index 0000000000..3d1658acf6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q5.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q5" +--- ++-----------+---------------+ +| n_name | revenue | ++-----------+---------------+ +| INDONESIA | 55502041.1697 | +| VIETNAM | 55295086.9967 | +| CHINA | 53724494.2566 | +| INDIA | 52035512.0002 | +| JAPAN | 45410175.6954 | ++-----------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q6.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q6.snap new file mode 100644 index 0000000000..757b91629c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q6.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q6" +--- ++----------------+ +| revenue | ++----------------+ +| 123141078.2283 | ++----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q7.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q7.snap new file mode 100644 index 0000000000..78cf8c2674 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q7.snap @@ -0,0 +1,12 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q7" +--- ++-------------+-------------+--------+---------------+ +| supp_nation | cust_nation | l_year | revenue | ++-------------+-------------+--------+---------------+ +| FRANCE | GERMANY | 1995 | 54639732.7336 | +| FRANCE | GERMANY | 1996 | 54633083.3076 | +| GERMANY | FRANCE | 1995 | 52531746.6697 | +| GERMANY | FRANCE | 1996 | 52520549.0224 | ++-------------+-------------+--------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q8.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q8.snap new file mode 100644 index 0000000000..7aba8e1b49 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q8.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q8" +--- ++--------+------------+ +| o_year | mkt_share | ++--------+------------+ +| 1995 | 0.03443589 | +| 1996 | 0.04148552 | ++--------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q9.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q9.snap new file mode 100644 index 0000000000..07281b8877 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__databricks[delta_lake]-federated_tpch_q9.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q9" +--- ++-----------+--------+---------------+ +| nation | o_year | sum_profit | ++-----------+--------+---------------+ +| ALGERIA | 1998 | 27136900.1803 | +| ALGERIA | 1997 | 48611833.4962 | +| ALGERIA | 1996 | 48285482.6782 | +| ALGERIA | 1995 | 44402273.5999 | +| ALGERIA | 1994 | 48694008.0668 | +| ALGERIA | 1993 | 46044207.7838 | +| ALGERIA | 1992 | 45636849.4881 | +| ARGENTINA | 1998 | 28341663.7848 | +| ARGENTINA | 1997 | 47143964.1176 | +| ARGENTINA | 1996 | 45255278.6021 | ++-----------+--------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__dremio-federated_tpcds_q77.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__dremio-federated_tpcds_q77.snap index d74a6db0d2..7f16919ba7 100644 --- a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__dremio-federated_tpcds_q77.snap +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__dremio-federated_tpcds_q77.snap @@ -8,8 +8,8 @@ description: "Query: tpcds_q77" | catalog channel | 1 | 136496133.90 | 1977144.03 | -14857629.58 | | catalog channel | 3 | 133445712.80 | 1977144.03 | -13874851.83 | | catalog channel | 5 | 136849440.15 | 1977144.03 | -15427339.98 | -| catalog channel | | 407587756.75 | 7908576.12 | -45411845.47 | | catalog channel | | 796469.90 | 1977144.03 | -1252024.08 | +| catalog channel | | 407587756.75 | 7908576.12 | -45411845.47 | | store channel | 1 | 19638349.68 | 474304.95 | -8836808.53 | | store channel | 2 | 18979671.24 | 563536.42 | -8428489.93 | | store channel | 4 | 19478905.32 | 402779.93 | -8542435.83 | diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[file]_tpcds_q77.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[file]_tpcds_q77.snap index 7f16919ba7..d74a6db0d2 100644 --- a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[file]_tpcds_q77.snap +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[file]_tpcds_q77.snap @@ -8,8 +8,8 @@ description: "Query: tpcds_q77" | catalog channel | 1 | 136496133.90 | 1977144.03 | -14857629.58 | | catalog channel | 3 | 133445712.80 | 1977144.03 | -13874851.83 | | catalog channel | 5 | 136849440.15 | 1977144.03 | -15427339.98 | -| catalog channel | | 796469.90 | 1977144.03 | -1252024.08 | | catalog channel | | 407587756.75 | 7908576.12 | -45411845.47 | +| catalog channel | | 796469.90 | 1977144.03 | -1252024.08 | | store channel | 1 | 19638349.68 | 474304.95 | -8836808.53 | | store channel | 2 | 18979671.24 | 563536.42 | -8428489.93 | | store channel | 4 | 19478905.32 | 402779.93 | -8542435.83 | diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[memory]_tpcds_q77.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[memory]_tpcds_q77.snap index d74a6db0d2..7f16919ba7 100644 --- a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[memory]_tpcds_q77.snap +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-duckdb[memory]_tpcds_q77.snap @@ -8,8 +8,8 @@ description: "Query: tpcds_q77" | catalog channel | 1 | 136496133.90 | 1977144.03 | -14857629.58 | | catalog channel | 3 | 133445712.80 | 1977144.03 | -13874851.83 | | catalog channel | 5 | 136849440.15 | 1977144.03 | -15427339.98 | -| catalog channel | | 407587756.75 | 7908576.12 | -45411845.47 | | catalog channel | | 796469.90 | 1977144.03 | -1252024.08 | +| catalog channel | | 407587756.75 | 7908576.12 | -45411845.47 | | store channel | 1 | 19638349.68 | 474304.95 | -8836808.53 | | store channel | 2 | 18979671.24 | 563536.42 | -8428489.93 | | store channel | 4 | 19478905.32 | 402779.93 | -8542435.83 | diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q1.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q1.snap new file mode 100644 index 0000000000..8e754582d1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q1.snap @@ -0,0 +1,12 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q1" +--- ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ +| l_returnflag | l_linestatus | sum_qty | sum_base_price | sum_disc_price | sum_charge | avg_qty | avg_price | avg_disc | count_order | ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ +| A | F | 37734107.00 | 56586554400.73 | 53758257134.8700 | 55909065222.827692 | 25.522005 | 38273.129734 | 0.049985 | 1478493 | +| N | F | 991417.00 | 1487504710.38 | 1413082168.0541 | 1469649223.194375 | 25.516471 | 38284.467760 | 0.050093 | 38854 | +| N | O | 74476040.00 | 111701729697.74 | 106118230307.6056 | 110367043872.497010 | 25.502226 | 38249.117988 | 0.049996 | 2920374 | +| R | F | 37719753.00 | 56568041380.90 | 53741292684.6040 | 55889619119.831932 | 25.505793 | 38250.854626 | 0.050009 | 1478870 | ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q10.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q10.snap new file mode 100644 index 0000000000..26b9181de4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q10.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q10" +--- ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ +| c_custkey | c_name | revenue | c_acctbal | n_name | c_address | c_phone | c_comment | ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ +| 57040 | Customer#000057040 | 734235.2455 | 632.87 | JAPAN | nICtsILWBB | 22-895-641-3466 | ep. blithely regular foxes promise slyly furiously ironic depend | +| 143347 | Customer#000143347 | 721002.6948 | 2557.47 | EGYPT | ,Q9Ml3w0gvX | 14-742-935-3718 | endencies sleep. slyly express deposits nag carefully around the even tithes. slyly regular | +| 60838 | Customer#000060838 | 679127.3077 | 2454.77 | BRAZIL | VWmQhWweqj5hFpcvhGFBeOY9hJ4m | 12-913-494-9813 | tes. final instructions nag quickly according to | +| 101998 | Customer#000101998 | 637029.5667 | 3790.89 | UNITED KINGDOM | 0,ORojfDdyMca2E2H | 33-593-865-6378 | ost carefully. slyly regular packages cajole about the blithely final ideas. permanently daring deposit | +| 125341 | Customer#000125341 | 633508.0860 | 4983.51 | GERMANY | 9YRcnoUPOM7Sa8xymhsDHdQg | 17-582-695-5962 | ly furiously brave packages. quickly regular dugouts kindle furiously carefully bold theodolites. | +| 25501 | Customer#000025501 | 620269.7849 | 7725.04 | ETHIOPIA | sr4VVVe3xCJQ2oo2QEhi19D,pXqo6kOGaSn2 | 15-874-808-6793 | y ironic foxes hinder according to the furiously permanent dolphins. pending ideas integrate blithely from | +| 115831 | Customer#000115831 | 596423.8672 | 5098.10 | FRANCE | AlMpPnmtGrOFrDMUs5VLo EIA,Cg,Rw5TBuBoKiO | 16-715-386-3788 | unts nag carefully final packages. express theodolites are regular ac | +| 84223 | Customer#000084223 | 594998.0239 | 528.65 | UNITED KINGDOM | Eq51o UpQ4RBr fYTdrZApDsPV4pQyuPq | 33-442-824-8191 | longside of the slyly final deposits. blithely final platelets about the blithely i | +| 54289 | Customer#000054289 | 585603.3918 | 5583.02 | IRAN | x3ouCpz6,pRNVhajr0CCQG1 | 20-834-292-4707 | cajole furiously after the quickly unusual fo | +| 39922 | Customer#000039922 | 584878.1134 | 7321.11 | GERMANY | 2KtWzW,FYkhdWBfobp6SFXWYKjvU9 | 17-147-757-8036 | ironic deposits sublate furiously. carefully regular theodolites along the b | ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q11.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q11.snap new file mode 100644 index 0000000000..0974bf70e5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q11.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q11" +--- ++------------+-------------+ +| ps_partkey | value | ++------------+-------------+ +| 129760 | 17538456.86 | +| 166726 | 16503353.92 | +| 191287 | 16474801.97 | +| 161758 | 16101755.54 | +| 34452 | 15983844.72 | +| 139035 | 15907078.34 | +| 9403 | 15451755.62 | +| 154358 | 15212937.88 | +| 38823 | 15064802.86 | +| 85606 | 15053957.15 | ++------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q12.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q12.snap new file mode 100644 index 0000000000..ef557741c7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q12.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q12" +--- ++------------+-----------------+----------------+ +| l_shipmode | high_line_count | low_line_count | ++------------+-----------------+----------------+ +| MAIL | 6202 | 9324 | +| SHIP | 6200 | 9262 | ++------------+-----------------+----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q13.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q13.snap new file mode 100644 index 0000000000..6e20cea9dc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q13.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q13" +--- ++---------+----------+ +| c_count | custdist | ++---------+----------+ +| 0 | 50004 | +| 10 | 6668 | +| 9 | 6563 | +| 11 | 6004 | +| 8 | 5890 | +| 12 | 5600 | +| 13 | 5029 | +| 19 | 4805 | +| 7 | 4680 | +| 18 | 4531 | ++---------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q14.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q14.snap new file mode 100644 index 0000000000..bb1cf95a03 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q14.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q14" +--- ++-------------------+ +| promo_revenue | ++-------------------+ +| 16.38077862639554 | ++-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q16.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q16.snap new file mode 100644 index 0000000000..33cf0d5df0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q16.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q16" +--- ++----------+--------------------------+--------+--------------+ +| p_brand | p_type | p_size | supplier_cnt | ++----------+--------------------------+--------+--------------+ +| Brand#41 | MEDIUM BRUSHED TIN | 3 | 28 | +| Brand#54 | STANDARD BRUSHED COPPER | 14 | 27 | +| Brand#11 | STANDARD BRUSHED TIN | 23 | 24 | +| Brand#11 | STANDARD BURNISHED BRASS | 36 | 24 | +| Brand#15 | MEDIUM ANODIZED NICKEL | 3 | 24 | +| Brand#15 | SMALL ANODIZED BRASS | 45 | 24 | +| Brand#15 | SMALL BURNISHED NICKEL | 19 | 24 | +| Brand#21 | MEDIUM ANODIZED COPPER | 3 | 24 | +| Brand#22 | SMALL BRUSHED NICKEL | 3 | 24 | +| Brand#22 | SMALL BURNISHED BRASS | 19 | 24 | ++----------+--------------------------+--------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q17.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q17.snap new file mode 100644 index 0000000000..d3ff4d6b5a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q17.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q17" +--- ++-------------------+ +| avg_yearly | ++-------------------+ +| 348406.0542857143 | ++-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q18.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q18.snap new file mode 100644 index 0000000000..e32e26b475 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q18.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q18" +--- ++--------------------+-----------+------------+-------------+--------------+--------------------------+ +| c_name | c_custkey | o_orderkey | o_orderdate | o_totalprice | sum(lineitem.l_quantity) | ++--------------------+-----------+------------+-------------+--------------+--------------------------+ +| Customer#000128120 | 128120 | 4722021 | 1994-04-07 | 544089.09 | 323.00 | +| Customer#000144617 | 144617 | 3043270 | 1997-02-12 | 530604.44 | 317.00 | +| Customer#000013940 | 13940 | 2232932 | 1997-04-13 | 522720.61 | 304.00 | +| Customer#000066790 | 66790 | 2199712 | 1996-09-30 | 515531.82 | 327.00 | +| Customer#000046435 | 46435 | 4745607 | 1997-07-03 | 508047.99 | 309.00 | +| Customer#000015272 | 15272 | 3883783 | 1993-07-28 | 500241.33 | 302.00 | +| Customer#000146608 | 146608 | 3342468 | 1994-06-12 | 499794.58 | 303.00 | +| Customer#000096103 | 96103 | 5984582 | 1992-03-16 | 494398.79 | 312.00 | +| Customer#000024341 | 24341 | 1474818 | 1992-11-15 | 491348.26 | 302.00 | +| Customer#000137446 | 137446 | 5489475 | 1997-05-23 | 487763.25 | 311.00 | ++--------------------+-----------+------------+-------------+--------------+--------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q19.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q19.snap new file mode 100644 index 0000000000..af10cb1f7e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q19.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q19" +--- ++--------------+ +| revenue | ++--------------+ +| 3083843.0578 | ++--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q2.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q2.snap new file mode 100644 index 0000000000..962ec44959 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q2.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q2" +--- ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ +| s_acctbal | s_name | n_name | p_partkey | p_mfgr | s_address | s_phone | s_comment | ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ +| 9938.53 | Supplier#000005359 | UNITED KINGDOM | 185358 | Manufacturer#4 | bgxj2K0w1kJvxYl5mhCfou,W | 33-429-790-6131 | l, ironic instructions cajole | +| 9937.84 | Supplier#000005969 | ROMANIA | 108438 | Manufacturer#1 | rdnmd9c8EG1EIAYY3LPVa4yUNx6OwyVaQ | 29-520-692-3537 | es. furiously silent deposits among the deposits haggle furiously a | +| 9936.22 | Supplier#000005250 | UNITED KINGDOM | 249 | Manufacturer#4 | qX AB0vP8mJEWeBuY9jri | 33-320-228-2957 | ar, regular requests nag blithely special accounts. final deposits impress carefully. ironic, | +| 9923.77 | Supplier#000002324 | GERMANY | 29821 | Manufacturer#4 | uXcnR7tv87dG | 17-779-299-1839 | s sleep according to the quick requests. carefully | +| 9871.22 | Supplier#000006373 | GERMANY | 43868 | Manufacturer#5 | iSLO35z7Ae | 17-813-485-8637 | against the slyly daring requests. unusual accounts wake atop the blithely spe | +| 9870.78 | Supplier#000001286 | GERMANY | 81285 | Manufacturer#2 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9870.78 | Supplier#000001286 | GERMANY | 181285 | Manufacturer#4 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9852.52 | Supplier#000008973 | RUSSIA | 18972 | Manufacturer#2 | zVfUT3Np22kUC05tYWHBotaR | 32-188-594-7038 | ly daring excuses unwind carefully above the fu | +| 9847.83 | Supplier#000008097 | RUSSIA | 130557 | Manufacturer#2 | veMRTQBmUResNvfD3 | 32-375-640-3593 | slyly ironic, special requests. final instructions above the qu | +| 9847.57 | Supplier#000006345 | FRANCE | 86344 | Manufacturer#1 | 68yX tGXAkVRSxUGNSjJdptw 8O878xaFnaoQK | 16-886-766-7945 | odolites. blithely special requests above the regular foxes sleep unusual sauternes. care | ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q20.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q20.snap new file mode 100644 index 0000000000..7bcc73e575 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q20.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q20" +--- ++--------------------+--------------------------------------+ +| s_name | s_address | ++--------------------+--------------------------------------+ +| Supplier#000000020 | JtPqm19E7tF 152Rl1wQZ8j0H | +| Supplier#000000091 | 35WVnU7GLNbQDcc2TARavGtk6RB6ZCd46UAY | +| Supplier#000000205 | Alrx5TN,hdnG | +| Supplier#000000285 | q TMZEDyZtv vUiFKBhT3NJlnIxpL | +| Supplier#000000287 | UQR8bUA4V2HxVbw9K | +| Supplier#000000354 | wSLcCW40Q8 | +| Supplier#000000378 | mLPJtpu4wOc cSFzBR | +| Supplier#000000402 | JR8vWoCteJtJg3okRpt0r28KEo | +| Supplier#000000530 | 0BvoewCPg2scOEfuL93FRKqSxHmdhw1 | +| Supplier#000000555 | 8Lp0QWPLFXrJrX1sTWkAEdzUsh5ke | ++--------------------+--------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q21.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q21.snap new file mode 100644 index 0000000000..f22be1b03e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q21.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q21" +--- ++--------------------+---------+ +| s_name | numwait | ++--------------------+---------+ +| Supplier#000002829 | 20 | +| Supplier#000005808 | 18 | +| Supplier#000000262 | 17 | +| Supplier#000000496 | 17 | +| Supplier#000002160 | 17 | +| Supplier#000002301 | 17 | +| Supplier#000002540 | 17 | +| Supplier#000003063 | 17 | +| Supplier#000005178 | 17 | +| Supplier#000008331 | 17 | ++--------------------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q22.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q22.snap new file mode 100644 index 0000000000..42b3e909ca --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q22.snap @@ -0,0 +1,15 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q22" +--- ++-----------+---------+------------+ +| cntrycode | numcust | totacctbal | ++-----------+---------+------------+ +| 13 | 888 | 6737713.99 | +| 17 | 861 | 6460573.72 | +| 18 | 964 | 7236687.40 | +| 23 | 892 | 6701457.95 | +| 29 | 948 | 7158866.63 | +| 30 | 909 | 6808436.13 | +| 31 | 922 | 6806670.18 | ++-----------+---------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q3.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q3.snap new file mode 100644 index 0000000000..8c5687347d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q3.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q3" +--- ++------------+-------------+-------------+----------------+ +| l_orderkey | revenue | o_orderdate | o_shippriority | ++------------+-------------+-------------+----------------+ +| 2456423 | 406181.0111 | 1995-03-05 | 0 | +| 3459808 | 405838.6989 | 1995-03-04 | 0 | +| 492164 | 390324.0610 | 1995-02-19 | 0 | +| 1188320 | 384537.9359 | 1995-03-09 | 0 | +| 2435712 | 378673.0558 | 1995-02-26 | 0 | +| 4878020 | 378376.7952 | 1995-03-12 | 0 | +| 5521732 | 375153.9215 | 1995-03-13 | 0 | +| 2628192 | 373133.3094 | 1995-02-22 | 0 | +| 993600 | 371407.4595 | 1995-03-05 | 0 | +| 2300070 | 367371.1452 | 1995-03-13 | 0 | ++------------+-------------+-------------+----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q4.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q4.snap new file mode 100644 index 0000000000..c45db96ed8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q4.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q4" +--- ++-----------------+-------------+ +| o_orderpriority | order_count | ++-----------------+-------------+ +| 1-URGENT | 10594 | +| 2-HIGH | 10476 | +| 3-MEDIUM | 10410 | +| 4-NOT SPECIFIED | 10556 | +| 5-LOW | 10487 | ++-----------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q5.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q5.snap new file mode 100644 index 0000000000..3d1658acf6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q5.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q5" +--- ++-----------+---------------+ +| n_name | revenue | ++-----------+---------------+ +| INDONESIA | 55502041.1697 | +| VIETNAM | 55295086.9967 | +| CHINA | 53724494.2566 | +| INDIA | 52035512.0002 | +| JAPAN | 45410175.6954 | ++-----------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q6.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q6.snap new file mode 100644 index 0000000000..757b91629c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q6.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q6" +--- ++----------------+ +| revenue | ++----------------+ +| 123141078.2283 | ++----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q7.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q7.snap new file mode 100644 index 0000000000..78cf8c2674 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q7.snap @@ -0,0 +1,12 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q7" +--- ++-------------+-------------+--------+---------------+ +| supp_nation | cust_nation | l_year | revenue | ++-------------+-------------+--------+---------------+ +| FRANCE | GERMANY | 1995 | 54639732.7336 | +| FRANCE | GERMANY | 1996 | 54633083.3076 | +| GERMANY | FRANCE | 1995 | 52531746.6697 | +| GERMANY | FRANCE | 1996 | 52520549.0224 | ++-------------+-------------+--------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q8.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q8.snap new file mode 100644 index 0000000000..7aba8e1b49 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q8.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q8" +--- ++--------+------------+ +| o_year | mkt_share | ++--------+------------+ +| 1995 | 0.03443589 | +| 1996 | 0.04148552 | ++--------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q9.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q9.snap new file mode 100644 index 0000000000..07281b8877 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-federated_tpch_q9.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q9" +--- ++-----------+--------+---------------+ +| nation | o_year | sum_profit | ++-----------+--------+---------------+ +| ALGERIA | 1998 | 27136900.1803 | +| ALGERIA | 1997 | 48611833.4962 | +| ALGERIA | 1996 | 48285482.6782 | +| ALGERIA | 1995 | 44402273.5999 | +| ALGERIA | 1994 | 48694008.0668 | +| ALGERIA | 1993 | 46044207.7838 | +| ALGERIA | 1992 | 45636849.4881 | +| ARGENTINA | 1998 | 28341663.7848 | +| ARGENTINA | 1997 | 47143964.1176 | +| ARGENTINA | 1996 | 45255278.6021 | ++-----------+--------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q1.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q1.snap new file mode 100644 index 0000000000..95672f0892 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q1.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q1" +--- ++------------------+ +| c_customer_id | ++------------------+ +| AAAAAAAAAEDAAAAA | +| AAAAAAAAAGAAAAAA | +| AAAAAAAAAHBAAAAA | +| AAAAAAAAAMAAAAAA | +| AAAAAAAAANAAAAAA | +| AAAAAAAAANDAAAAA | +| AAAAAAAABDAAAAAA | +| AAAAAAAABHCAAAAA | +| AAAAAAAABKBAAAAA | +| AAAAAAAABKCAAAAA | ++------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q10.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q10.snap new file mode 100644 index 0000000000..f334c224fa --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q10.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q10" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q11.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q11.snap new file mode 100644 index 0000000000..79d792eb62 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q11.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q11" +--- ++------------------+---------------------+--------------------+--------------------------------+ +| customer_id | customer_first_name | customer_last_name | customer_email_address | ++------------------+---------------------+--------------------+--------------------------------+ +| AAAAAAAAJIBAAAAA | Bruce | Olvera | Bruce.Olvera@x4L7yzc2I65OB.org | ++------------------+---------------------+--------------------+--------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q12.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q12.snap new file mode 100644 index 0000000000..2e567dadf5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q12.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q12" +--- ++------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-----------+-----------------+-------------+--------------+ +| i_item_id | i_item_desc | i_category | i_class | i_current_price | itemrevenue | revenueratio | ++------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-----------+-----------------+-------------+--------------+ +| AAAAAAAAGCAAAAAA | International, substantial schools mean effectively. Users put then in a operations. Particul | Books | business | 5.07 | 4869.76 | 100.000000 | +| AAAAAAAABGAAAAAA | More reg | Books | fiction | 57.09 | 5196.30 | 77.809073 | +| AAAAAAAADEAAAAAA | Already | Books | fiction | 1.47 | 138.40 | 2.072393 | +| AAAAAAAALIAAAAAA | Lines shall describe explicitly northern, firm systems. Later | Books | fiction | 2.99 | 1343.57 | 20.118534 | +| AAAAAAAANJAAAAAA | Recent performances get yet other publications; current patients could not carry comparatively intense, vital times. Wide problems smooth truly. Tomorrow used years catch a | Books | reference | 2.21 | 8826.84 | 100.000000 | +| AAAAAAAAAEAAAAAA | Readily happy questions give other, large parents. Parents might use over top influences. Small men would | Books | science | 6.67 | 14383.38 | 100.000000 | +| AAAAAAAABJAAAAAA | Prospects know | Books | self-help | 59.77 | 3690.50 | 30.448590 | +| AAAAAAAAJHAAAAAA | However increasing dates meet. Large, ready goals mean now blind structures. Crea | Books | self-help | 38.79 | 8429.93 | 69.551410 | +| AAAAAAAACLAAAAAA | Eyes appreciate political yards. Constant, awful eyes could c | Books | sports | 1.71 | 18977.23 | 100.000000 | +| AAAAAAAAOFAAAAAA | Enough gradual particles will encourage; therefore national studies approach even complete hours. Volumes would come wooden, great places. Economical | Jewelry | birdal | 4.19 | 690.59 | 100.000000 | ++------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-----------+-----------------+-------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q13.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q13.snap new file mode 100644 index 0000000000..a6907df126 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q13.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q13" +--- ++------------------------------+-------------------------------------+----------------------------------------+----------------------------------------+ +| avg(store_sales.ss_quantity) | avg(store_sales.ss_ext_sales_price) | avg(store_sales.ss_ext_wholesale_cost) | sum(store_sales.ss_ext_wholesale_cost) | ++------------------------------+-------------------------------------+----------------------------------------+----------------------------------------+ +| | | | | ++------------------------------+-------------------------------------+----------------------------------------+----------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q15.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q15.snap new file mode 100644 index 0000000000..096ac5720a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q15.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q15" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q16.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q16.snap new file mode 100644 index 0000000000..60656efd26 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q16.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q16" +--- ++-------------+---------------------+------------------+ +| order count | total shipping cost | total net profit | ++-------------+---------------------+------------------+ +| 0 | | | ++-------------+---------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q19.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q19.snap new file mode 100644 index 0000000000..0ad9967a7e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q19.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q19" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q2.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q2.snap new file mode 100644 index 0000000000..be9c7bbdfd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q2.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q2" +--- ++-------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ +| d_week_seq1 | round(y.sun_sales1 / z.sun_sales2,Int64(2)) | round(y.mon_sales1 / z.mon_sales2,Int64(2)) | round(y.tue_sales1 / z.tue_sales2,Int64(2)) | round(y.wed_sales1 / z.wed_sales2,Int64(2)) | round(y.thu_sales1 / z.thu_sales2,Int64(2)) | round(y.fri_sales1 / z.fri_sales2,Int64(2)) | round(y.sat_sales1 / z.sat_sales2,Int64(2)) | ++-------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | +| 5218 | 2.1 | 1.35 | 5.87 | 7.57 | 5.1 | 2.38 | 2.15 | ++-------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q20.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q20.snap new file mode 100644 index 0000000000..3040f489f3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q20.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q20" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q21.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q21.snap new file mode 100644 index 0000000000..9b6e63e8d3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q21.snap @@ -0,0 +1,11 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q21" +--- ++---------------------+------------------+------------+-----------+ +| w_warehouse_name | i_item_id | inv_before | inv_after | ++---------------------+------------------+------------+-----------+ +| Conventional childr | AAAAAAAAHDAAAAAA | 2171 | 2759 | +| Conventional childr | AAAAAAAAMBAAAAAA | 2427 | 2495 | +| Conventional childr | AAAAAAAAPKAAAAAA | 2319 | 2866 | ++---------------------+------------------+------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q25.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q25.snap new file mode 100644 index 0000000000..592a077680 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q25.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q25" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q26.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q26.snap new file mode 100644 index 0000000000..9a71cde2c4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q26.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q26" +--- ++------------------+------+------------+------------+------------+ +| i_item_id | agg1 | agg2 | agg3 | agg4 | ++------------------+------+------------+------------+------------+ +| AAAAAAAAACAAAAAA | 25.0 | 84.620000 | 0.000000 | 70.640000 | +| AAAAAAAAAEAAAAAA | 60.0 | 291.990000 | 0.000000 | 99.270000 | +| AAAAAAAAAFAAAAAA | 57.5 | 113.850000 | 0.000000 | 45.190000 | +| AAAAAAAAAHAAAAAA | 43.0 | 78.775000 | 391.645000 | 28.460000 | +| AAAAAAAAAIAAAAAA | 61.0 | 63.965000 | 0.000000 | 25.110000 | +| AAAAAAAAAKAAAAAA | 86.5 | 45.800000 | 0.000000 | 36.200000 | +| AAAAAAAAALAAAAAA | 51.0 | 65.770000 | 0.000000 | 57.870000 | +| AAAAAAAABAAAAAAA | 81.0 | 186.910000 | 0.000000 | 175.690000 | +| AAAAAAAABDAAAAAA | 69.0 | 90.700000 | 0.000000 | 29.020000 | +| AAAAAAAABGAAAAAA | 81.5 | 104.090000 | 0.000000 | 50.175000 | ++------------------+------+------------+------------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q28.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q28.snap new file mode 100644 index 0000000000..ea069f2432 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q28.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q28" +--- ++-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+------------+--------+---------+ +| B1_LP | B1_CNT | B1_CNTD | B2_LP | B2_CNT | B2_CNTD | B3_LP | B3_CNT | B3_CNTD | B4_LP | B4_CNT | B4_CNTD | B5_LP | B5_CNT | B5_CNTD | B6_LP | B6_CNT | B6_CNTD | ++-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+------------+--------+---------+ +| 54.676527 | 357 | 346 | 89.351977 | 344 | 340 | 58.990556 | 288 | 280 | 70.273531 | 371 | 360 | 89.852032 | 315 | 311 | 108.428782 | 271 | 268 | ++-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+------------+--------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q3.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q3.snap new file mode 100644 index 0000000000..2a588d4715 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q3.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q3" +--- ++--------+----------+-----------------------+-----------+ +| d_year | brand_id | brand | sum_agg | ++--------+----------+-----------------------+-----------+ +| 1998 | 5004001 | edu packscholar #1 | -18566.58 | +| 1999 | 5004001 | edu packscholar #1 | -18629.92 | +| 2000 | 9014012 | edu packunivamalg #12 | -2096.71 | +| 2001 | 9014012 | edu packunivamalg #12 | -10122.45 | +| 2002 | 1002001 | importoamalg #1 | -3574.62 | ++--------+----------+-----------------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q30.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q30.snap new file mode 100644 index 0000000000..07a6d99097 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q30.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q30" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q31.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q31.snap new file mode 100644 index 0000000000..5731ec003f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q31.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q31" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q32.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q32.snap new file mode 100644 index 0000000000..fc6e55d89b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q32.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q32" +--- ++------------------------+ +| excess discount amount | ++------------------------+ +| | ++------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q33.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q33.snap new file mode 100644 index 0000000000..138ae7f020 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q33.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q33" +--- ++---------------+-------------+ +| i_manufact_id | total_sales | ++---------------+-------------+ +| 453 | 339.70 | +| 285 | 508.61 | +| 46 | 525.47 | +| 307 | 1854.72 | +| 275 | 2116.54 | +| 321 | 2304.59 | +| 301 | 2690.26 | +| 428 | 4847.09 | +| 548 | 5167.23 | +| 296 | 5654.31 | ++---------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q34.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q34.snap new file mode 100644 index 0000000000..e70f4a6f59 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q34.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q34" +--- ++-------------+--------------+--------------+-----------------------+------------------+-----+ +| c_last_name | c_first_name | c_salutation | c_preferred_cust_flag | ss_ticket_number | cnt | ++-------------+--------------+--------------+-----------------------+------------------+-----+ +| Cole | Ruby | Dr. | N | 932 | 16 | ++-------------+--------------+--------------+-----------------------+------------------+-----+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q37.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q37.snap new file mode 100644 index 0000000000..a554c2909c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q37.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q37" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q4.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q4.snap new file mode 100644 index 0000000000..ae13e87b0c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q4.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q4" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q40.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q40.snap new file mode 100644 index 0000000000..804a96ee52 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q40.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q40" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q41.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q41.snap new file mode 100644 index 0000000000..75385a7cd2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q41.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q41" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q42.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q42.snap new file mode 100644 index 0000000000..4d9b240f5a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q42.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q42" +--- ++--------+---------------+------------+-------------------------------------+ +| d_year | i_category_id | i_category | sum(store_sales.ss_ext_sales_price) | ++--------+---------------+------------+-------------------------------------+ +| 1998 | 7 | Home | 20738.75 | ++--------+---------------+------------+-------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q43.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q43.snap new file mode 100644 index 0000000000..2e0e598900 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q43.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q43" +--- ++--------------+------------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ +| s_store_name | s_store_id | sun_sales | mon_sales | tue_sales | wed_sales | thu_sales | fri_sales | sat_sales | ++--------------+------------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ +| ought | AAAAAAAABAAAAAAA | 29773.97 | 31876.40 | 21302.76 | 30214.09 | 27946.55 | 39622.91 | 27299.05 | ++--------------+------------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q44.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q44.snap new file mode 100644 index 0000000000..bc1f5ce6dc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q44.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q44" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q45.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q45.snap new file mode 100644 index 0000000000..5eff8bdecc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q45.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q45" +--- ++--------+-----------+-------------------------------+ +| ca_zip | ca_city | sum(web_sales.ws_sales_price) | ++--------+-----------+-------------------------------+ +| 45413 | Sutton | 24.45 | +| 61398 | Warwick | 51.72 | +| 61904 | Midway | 74.41 | +| 65709 | Fairview | 171.60 | +| 65804 | Harmony | 52.90 | +| 68721 | Union | 126.97 | +| 68828 | Greenwood | 89.11 | +| 75804 | Harmony | 49.55 | +| 89275 | Shiloh | 19.51 | ++--------+-----------+-------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q46.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q46.snap new file mode 100644 index 0000000000..9823e994dd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q46.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q46" +--- ++-------------+--------------+---------------+-----------------+------------------+---------+-----------+ +| c_last_name | c_first_name | ca_city | bought_city | ss_ticket_number | amt | profit | ++-------------+--------------+---------------+-----------------+------------------+---------+-----------+ +| Adams | Chris | Spring Hill | Lakeview | 114 | 428.59 | -2260.63 | +| Adams | Chris | Spring Hill | Pleasant Valley | 1908 | 1336.67 | -11872.45 | +| Aguilar | Roy | Montpelier | Green Acres | 614 | 1271.18 | -3249.77 | +| Anderson | Marc | Martinsville | Marion | 1559 | 1579.93 | -21411.41 | +| Archie | Geneva | Enterprise | Lakeview | 89 | 2578.22 | -10494.29 | +| Bass | Valerie | Woodland | Crossroads | 1750 | 5324.08 | -9542.73 | +| Beyer | Laurence | Lakeview | Five Points | 51 | 43.34 | -4263.18 | +| Boles | Eduardo | Shady Grove | Montezuma | 416 | 490.32 | 209.20 | +| Boone | Charles | Highland Park | Pleasant Valley | 1967 | 103.69 | -12151.37 | +| Booth | Melva | Crossroads | Pleasant Valley | 1822 | 2963.03 | -1365.61 | ++-------------+--------------+---------------+-----------------+------------------+---------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q47.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q47.snap new file mode 100644 index 0000000000..f303b37239 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q47.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q47" +--- ++------------+--------------------+--------------+----------------+--------+-------------------+-----------+--------+---------+ +| i_category | i_brand | s_store_name | s_company_name | d_year | avg_monthly_sales | sum_sales | psum | nsum | ++------------+--------------------+--------------+----------------+--------+-------------------+-----------+--------+---------+ +| Women | edu packamalg #2 | ought | Unknown | 2001 | 892.472500 | 213.99 | 643.32 | 665.13 | +| Music | exportischolar #2 | ought | Unknown | 2001 | 768.536667 | 92.96 | 319.61 | 134.25 | +| Women | edu packamalg #2 | ought | Unknown | 2001 | 892.472500 | 250.77 | 378.47 | 643.32 | +| Music | exportischolar #2 | ought | Unknown | 2001 | 768.536667 | 134.25 | 92.96 | 1626.75 | +| Children | exportiexporti #2 | ought | Unknown | 2001 | 846.785833 | 236.56 | 438.98 | 736.59 | +| Men | amalgimporto #2 | ought | Unknown | 2001 | 1196.761667 | 631.88 | 774.43 | 760.43 | +| Men | amalgimporto #2 | ought | Unknown | 2001 | 1196.761667 | 637.00 | 715.72 | 1412.57 | +| Children | edu packexporti #2 | ought | Unknown | 2001 | 789.115000 | 237.21 | 675.87 | 315.38 | +| Men | amalgimporto #2 | ought | Unknown | 2001 | 1196.761667 | 679.89 | 760.43 | 715.72 | +| Women | edu packamalg #2 | ought | Unknown | 2001 | 892.472500 | 378.47 | 427.51 | 250.77 | ++------------+--------------------+--------------+----------------+--------+-------------------+-----------+--------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q48.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q48.snap new file mode 100644 index 0000000000..60f82f7c35 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q48.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q48" +--- ++------------------------------+ +| sum(store_sales.ss_quantity) | ++------------------------------+ +| 332 | ++------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q49.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q49.snap new file mode 100644 index 0000000000..ae765c21af --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q49.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q49" +--- ++---------+------+--------------+-------------+---------------+ +| channel | item | return_ratio | return_rank | currency_rank | ++---------+------+--------------+-------------+---------------+ +| catalog | 125 | 0.00000000 | 1 | 1 | ++---------+------+--------------+-------------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q50.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q50.snap new file mode 100644 index 0000000000..4f442590ce --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q50.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q50" +--- ++--------------+--------------+-----------------+---------------+---------------+----------------+--------+-------------------+---------+-------+---------+------------+------------+-------------+-----------+ +| s_store_name | s_company_id | s_street_number | s_street_name | s_street_type | s_suite_number | s_city | s_county | s_state | s_zip | 30 days | 31-60 days | 61-90 days | 91-120 days | >120 days | ++--------------+--------------+-----------------+---------------+---------------+----------------+--------+-------------------+---------+-------+---------+------------+------------+-------------+-----------+ +| ought | 1 | 767 | Spring | Wy | Suite 250 | Midway | Williamson County | TN | 31904 | 7 | 0 | 5 | 1 | 11 | ++--------------+--------------+-----------------+---------------+---------------+----------------+--------+-------------------+---------+-------+---------+------------+------------+-------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q51.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q51.snap new file mode 100644 index 0000000000..5f5cbc19ba --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q51.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q51" +--- ++---------+------------+-----------+-------------+----------------+------------------+ +| item_sk | d_date | web_sales | store_sales | web_cumulative | store_cumulative | ++---------+------------+-----------+-------------+----------------+------------------+ +| 3 | 2001-04-08 | 15.89 | | 15.89 | 10.91 | +| 3 | 2001-05-20 | 167.78 | | 167.78 | 118.82 | +| 5 | 2001-06-21 | 290.02 | | 290.02 | 254.14 | +| 5 | 2001-06-24 | 321.21 | | 321.21 | 254.14 | +| 5 | 2001-06-27 | | 299.74 | 321.21 | 299.74 | +| 5 | 2001-07-06 | 431.77 | 365.25 | 431.77 | 365.25 | +| 5 | 2001-07-14 | | 424.39 | 431.77 | 424.39 | +| 5 | 2001-07-15 | | 424.39 | 431.77 | 424.39 | +| 5 | 2001-07-20 | 464.81 | | 464.81 | 437.85 | +| 9 | 2001-04-05 | | 37.04 | 78.44 | 37.04 | ++---------+------------+-----------+-------------+----------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q52.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q52.snap new file mode 100644 index 0000000000..1c4e9a6ea4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q52.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q52" +--- ++--------+----------+------------------+-----------+ +| d_year | brand_id | brand | ext_price | ++--------+----------+------------------+-----------+ +| 2000 | 7008009 | namelessbrand #9 | 43822.54 | ++--------+----------+------------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q53.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q53.snap new file mode 100644 index 0000000000..e88947a5f8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q53.snap @@ -0,0 +1,11 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q53" +--- ++---------------+-----------+---------------------+ +| i_manufact_id | sum_sales | avg_quarterly_sales | ++---------------+-----------+---------------------+ +| 93 | 61.14 | 509.027500 | +| 93 | 382.10 | 509.027500 | +| 93 | 1070.79 | 509.027500 | ++---------------+-----------+---------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q54.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q54.snap new file mode 100644 index 0000000000..ff4192ac69 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q54.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q54" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q55.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q55.snap new file mode 100644 index 0000000000..3b797c1163 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q55.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q55" +--- ++----------+---------------------+-----------+ +| brand_id | brand | ext_price | ++----------+---------------------+-----------+ +| 9015008 | scholarunivamalg #8 | 25131.36 | ++----------+---------------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q56.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q56.snap new file mode 100644 index 0000000000..8a3b907dcd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q56.snap @@ -0,0 +1,14 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q56" +--- ++------------------+-------------+ +| i_item_id | total_sales | ++------------------+-------------+ +| AAAAAAAAABAAAAAA | 133.14 | +| AAAAAAAAKJAAAAAA | 217.05 | +| AAAAAAAAICAAAAAA | 1372.00 | +| AAAAAAAAAKAAAAAA | 2433.06 | +| AAAAAAAAGFAAAAAA | 6629.42 | +| AAAAAAAAKGAAAAAA | 7942.68 | ++------------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q57.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q57.snap new file mode 100644 index 0000000000..f22a351eb6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q57.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q57" +--- ++----------+--------+-------+-------------------+-----------+---------+---------+ +| cc_name | d_year | d_moy | avg_monthly_sales | sum_sales | psum | nsum | ++----------+--------+-------+-------------------+-----------+---------+---------+ +| NY Metro | 2000 | 10 | 949.893333 | 382.23 | 673.09 | 2734.05 | +| NY Metro | 2000 | 1 | 949.893333 | 403.28 | 729.04 | 515.76 | +| NY Metro | 2000 | 7 | 949.893333 | 460.44 | 797.19 | 525.22 | +| NY Metro | 2000 | 6 | 805.049167 | 332.25 | 799.33 | 823.18 | +| NY Metro | 2000 | 4 | 805.049167 | 337.52 | 1216.24 | 799.33 | +| NY Metro | 2000 | 3 | 512.695000 | 68.00 | 245.67 | 595.97 | +| NY Metro | 2000 | 2 | 949.893333 | 515.76 | 403.28 | 809.49 | +| NY Metro | 2000 | 8 | 949.893333 | 525.22 | 460.44 | 673.09 | +| NY Metro | 2000 | 1 | 512.695000 | 130.07 | 824.45 | 245.67 | +| NY Metro | 2000 | 4 | 949.893333 | 574.89 | 809.49 | 734.80 | ++----------+--------+-------+-------------------+-----------+---------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q58.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q58.snap new file mode 100644 index 0000000000..08c3b59deb --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q58.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q58" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q59.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q59.snap new file mode 100644 index 0000000000..40e86a6f83 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q59.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q59" +--- ++---------------+------------------+-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ +| s_store_name1 | s_store_id1 | d_week_seq1 | y.sun_sales1 / x.sun_sales2 | y.mon_sales1 / x.mon_sales2 | y.tue_sales1 / x.tue_sales2 | y.wed_sales1 / x.wed_sales2 | y.thu_sales1 / x.thu_sales2 | y.fri_sales1 / x.fri_sales2 | y.sat_sales1 / x.sat_sales2 | ++---------------+------------------+-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ +| ought | AAAAAAAABAAAAAAA | 5244 | | | | | | 0.297652 | | +| ought | AAAAAAAABAAAAAAA | 5244 | | | | | | 0.297652 | | +| ought | AAAAAAAABAAAAAAA | 5244 | | | | | | 0.297652 | | +| ought | AAAAAAAABAAAAAAA | 5244 | | | | | | 0.297652 | | +| ought | AAAAAAAABAAAAAAA | 5244 | | | | | | 0.297652 | | +| ought | AAAAAAAABAAAAAAA | 5244 | | | | | | 0.297652 | | +| ought | AAAAAAAABAAAAAAA | 5245 | | | | 0.459190 | | | | +| ought | AAAAAAAABAAAAAAA | 5245 | | | | 0.459190 | | | | +| ought | AAAAAAAABAAAAAAA | 5245 | | | | 0.459190 | | | | +| ought | AAAAAAAABAAAAAAA | 5245 | | | | 0.459190 | | | | ++---------------+------------------+-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q6.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q6.snap new file mode 100644 index 0000000000..2d22369211 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q6.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q6" +--- ++-------+-----+ +| state | cnt | ++-------+-----+ +| AK | 11 | +| TX | 12 | ++-------+-----+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q60.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q60.snap new file mode 100644 index 0000000000..c30c3d2466 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q60.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q60" +--- ++------------------+-------------+ +| i_item_id | total_sales | ++------------------+-------------+ +| AAAAAAAAAFAAAAAA | 9761.39 | +| AAAAAAAAAHAAAAAA | 14394.76 | +| AAAAAAAAAKAAAAAA | 17968.38 | +| AAAAAAAACDAAAAAA | 3240.86 | +| AAAAAAAACFAAAAAA | 6407.28 | +| AAAAAAAAEJAAAAAA | 4413.43 | +| AAAAAAAAGHAAAAAA | 4583.73 | +| AAAAAAAAGIAAAAAA | 28091.38 | +| AAAAAAAAHGAAAAAA | 10131.95 | +| AAAAAAAAIIAAAAAA | 18945.76 | ++------------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q61.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q61.snap new file mode 100644 index 0000000000..dab091da86 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q61.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q61" +--- ++------------+-------+-------------------------------------------------------------+ +| promotions | total | promotional_sales.promotions / all_sales.total * Int64(100) | ++------------+-------+-------------------------------------------------------------+ +| | | | ++------------+-------+-------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q62.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q62.snap new file mode 100644 index 0000000000..6a5a939ab2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q62.snap @@ -0,0 +1,14 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q62" +--- ++-------------------------------------------------------+-----------+----------+---------+------------+------------+-------------+-----------+ +| substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) | sm_type | web_name | 30 days | 31-60 days | 61-90 days | 91-120 days | >120 days | ++-------------------------------------------------------+-----------+----------+---------+------------+------------+-------------+-----------+ +| Conventional childr | EXPRESS | site_0 | 82 | 86 | 84 | 74 | 0 | +| Conventional childr | LIBRARY | site_0 | 55 | 68 | 70 | 74 | 0 | +| Conventional childr | NEXT DAY | site_0 | 65 | 61 | 86 | 73 | 0 | +| Conventional childr | OVERNIGHT | site_0 | 70 | 67 | 56 | 58 | 0 | +| Conventional childr | REGULAR | site_0 | 55 | 62 | 61 | 54 | 0 | +| Conventional childr | TWO DAY | site_0 | 53 | 67 | 60 | 68 | 0 | ++-------------------------------------------------------+-----------+----------+---------+------------+------------+-------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q63.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q63.snap new file mode 100644 index 0000000000..e788b5d1a8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q63.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q63" +--- ++--------------+-----------+-------------------+ +| i_manager_id | sum_sales | avg_monthly_sales | ++--------------+-----------+-------------------+ +| 11 | 9.58 | 104.816000 | +| 11 | 16.19 | 104.816000 | +| 11 | 33.19 | 104.816000 | +| 11 | 84.03 | 104.816000 | +| 11 | 117.79 | 104.816000 | +| 11 | 135.17 | 104.816000 | +| 11 | 143.71 | 104.816000 | +| 11 | 182.00 | 104.816000 | +| 11 | 225.86 | 104.816000 | +| 23 | 2.90 | 157.519167 | ++--------------+-----------+-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q64.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q64.snap new file mode 100644 index 0000000000..abd2658b36 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q64.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q64" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q65.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q65.snap new file mode 100644 index 0000000000..f3a23ff233 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q65.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q65" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q66.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q66.snap new file mode 100644 index 0000000000..d67fad7da9 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q66.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q66" +--- ++---------------------+-------------------+--------+-------------------+---------+---------------+---------------+------+-----------+------------+-----------+-----------+-----------+------------+-----------+------------+------------+-----------+------------+------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+------------+-----------+------------+------------+------------+------------+------------+------------+------------+------------+------------+----------+ +| w_warehouse_name | w_warehouse_sq_ft | w_city | w_county | w_state | w_country | ship_carriers | year | jan_sales | feb_sales | mar_sales | apr_sales | may_sales | jun_sales | jul_sales | aug_sales | sep_sales | oct_sales | nov_sales | dec_sales | jan_sales_per_sq_foot | feb_sales_per_sq_foot | mar_sales_per_sq_foot | apr_sales_per_sq_foot | may_sales_per_sq_foot | jun_sales_per_sq_foot | jul_sales_per_sq_foot | aug_sales_per_sq_foot | sep_sales_per_sq_foot | oct_sales_per_sq_foot | nov_sales_per_sq_foot | dec_sales_per_sq_foot | jan_net | feb_net | mar_net | apr_net | may_net | jun_net | jul_net | aug_net | sep_net | oct_net | nov_net | dec_net | ++---------------------+-------------------+--------+-------------------+---------+---------------+---------------+------+-----------+------------+-----------+-----------+-----------+------------+-----------+------------+------------+-----------+------------+------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+------------+-----------+------------+------------+------------+------------+------------+------------+------------+------------+------------+----------+ +| Conventional childr | 977787 | Midway | Williamson County | TN | United States | FEDEX,GERMA | 2001 | 50983.63 | 1741917.32 | 439997.54 | 27261.11 | 358962.89 | 1617160.97 | 59175.13 | 3506098.93 | 1604026.33 | 231134.27 | 1331564.61 | 1508985.03 | 0.052142 | 1.781490 | 0.449993 | 0.027880 | 0.367118 | 1.653899 | 0.060519 | 3.585749 | 1.640466 | 0.236385 | 1.361815 | 1.543266 | 2546719.17 | 824505.14 | 1231035.79 | 1788373.09 | 2220318.07 | 2685291.09 | 3136698.66 | 1225313.88 | 1388994.58 | 2176810.04 | -158589.58 | 43716.56 | ++---------------------+-------------------+--------+-------------------+---------+---------------+---------------+------+-----------+------------+-----------+-----------+-----------+------------+-----------+------------+------------+-----------+------------+------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+------------+-----------+------------+------------+------------+------------+------------+------------+------------+------------+------------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q68.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q68.snap new file mode 100644 index 0000000000..7a7c4cc58e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q68.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q68" +--- ++-------------+--------------+-----------------+--------------+------------------+----------------+--------------+------------+ +| c_last_name | c_first_name | ca_city | bought_city | ss_ticket_number | extended_price | extended_tax | list_price | ++-------------+--------------+-----------------+--------------+------------------+----------------+--------------+------------+ +| Batson | Gina | Hopewell | Rankin | 1347 | 16088.73 | 493.53 | 34692.87 | +| Berry | Nancy | Pleasant Valley | Mount Vernon | 2352 | 16653.06 | 844.01 | 32011.82 | +| Betz | Bruce | Altamont | Lewisburg | 182 | 12086.78 | 380.32 | 39598.13 | +| Butler | Jay | Oakdale | Riverview | 1124 | 28497.54 | 1508.43 | 46444.94 | +| Chapa | Marilyn | Woodlawn | Maple Grove | 2372 | 18919.89 | 760.49 | 42509.68 | +| Clemons | Sarah | Summit | Macedonia | 1286 | 12770.98 | 437.55 | 29972.51 | +| Foster | | Oak Ridge | Five Forks | 1167 | 9921.97 | 440.34 | 22954.42 | +| Gilmore | Raymond | Centerville | Riverview | 1714 | 10894.52 | 378.16 | 20085.94 | +| Hernandez | Rachel | Greenwood | Harmony | 1864 | 32529.65 | 1395.73 | 53606.11 | +| Marcum | Issac | Green Acres | Enterprise | 2102 | 21845.11 | 1284.43 | 47769.79 | ++-------------+--------------+-----------------+--------------+------------------+----------------+--------------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q69.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q69.snap new file mode 100644 index 0000000000..c60e02d449 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q69.snap @@ -0,0 +1,17 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q69" +--- ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+ +| cd_gender | cd_marital_status | cd_education_status | cnt1 | cd_purchase_estimate | cnt2 | cd_credit_rating | cnt3 | ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+ +| F | D | Secondary | 1 | 5000 | 1 | Good | 1 | +| F | M | Secondary | 1 | 2000 | 1 | Unknown | 1 | +| F | S | College | 1 | 3000 | 1 | Low Risk | 1 | +| F | U | 2 yr Degree | 1 | 6500 | 1 | Good | 1 | +| F | U | Unknown | 1 | 7500 | 1 | Good | 1 | +| M | M | College | 1 | 5500 | 1 | Low Risk | 1 | +| M | S | 2 yr Degree | 1 | 3000 | 1 | Unknown | 1 | +| M | S | Primary | 1 | 500 | 1 | High Risk | 1 | +| M | W | 4 yr Degree | 1 | 1000 | 1 | Unknown | 1 | ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q7.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q7.snap new file mode 100644 index 0000000000..725701cd48 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q7.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q7" +--- ++------------------+------+------------+------------+------------+ +| i_item_id | agg1 | agg2 | agg3 | agg4 | ++------------------+------+------------+------------+------------+ +| AAAAAAAAABAAAAAA | 49.5 | 109.125000 | 0.000000 | 52.210000 | +| AAAAAAAAACAAAAAA | 16.0 | 92.580000 | 10.190000 | 2.770000 | +| AAAAAAAAAIAAAAAA | 42.0 | 74.340000 | 0.000000 | 61.700000 | +| AAAAAAAAAKAAAAAA | 79.0 | 76.045000 | 501.630000 | 20.290000 | +| AAAAAAAABGAAAAAA | 93.0 | 140.770000 | 0.000000 | 18.300000 | +| AAAAAAAACAAAAAAA | 78.0 | 54.940000 | 0.000000 | 34.720000 | +| AAAAAAAACCAAAAAA | 14.0 | 60.330000 | 0.000000 | 24.730000 | +| AAAAAAAACDAAAAAA | 29.0 | 148.750000 | 0.000000 | 133.870000 | +| AAAAAAAACGAAAAAA | 94.0 | 7.570000 | 0.000000 | 3.930000 | +| AAAAAAAACIAAAAAA | 97.0 | 4.200000 | 0.000000 | 2.310000 | ++------------------+------+------------+------------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q71.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q71.snap new file mode 100644 index 0000000000..d2c335dbf2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q71.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q71" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q72.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q72.snap new file mode 100644 index 0000000000..0303230783 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q72.snap @@ -0,0 +1,11 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q72" +--- ++------------------------------------------------------------------------------------------------------------+---------------------+------------+----------+-------+-----------+ +| i_item_desc | w_warehouse_name | d_week_seq | no_promo | promo | total_cnt | ++------------------------------------------------------------------------------------------------------------+---------------------+------------+----------+-------+-----------+ +| Everywhere large things could increase. Together independent cases cannot draw to a centuries. Different a | Conventional childr | 5212 | 0 | 1 | 1 | +| Likely, main groups possess rich, interested cards; of course african me | Conventional childr | 5192 | 0 | 1 | 1 | +| Likely, main groups possess rich, interested cards; of course african me | Conventional childr | 5208 | 0 | 1 | 1 | ++------------------------------------------------------------------------------------------------------------+---------------------+------------+----------+-------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q73.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q73.snap new file mode 100644 index 0000000000..de55fdd9b3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q73.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q73" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q75.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q75.snap new file mode 100644 index 0000000000..655a785f25 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q75.snap @@ -0,0 +1,11 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q75" +--- ++-----------+------+------------+------------+---------------+---------------+-------------+-------------+----------------+-------------------------+ +| prev_year | year | i_brand_id | i_class_id | i_category_id | i_manufact_id | prev_yr_cnt | curr_yr_cnt | sales_cnt_diff | sales_amt_diff | ++-----------+------+------------+------------+---------------+---------------+-------------+-------------+----------------+-------------------------+ +| 1999 | 2000 | 4003001 | 3 | 4 | 376 | 6362 | 4853 | -1509 | -120879.960000000016384 | +| 1999 | 2000 | 4004001 | 4 | 4 | 140 | 6397 | 6311 | -86 | -86494.329999999991808 | +| 1999 | 2000 | 4003001 | 3 | 4 | 329 | 5202 | 5196 | -6 | -17532.890000000014336 | ++-----------+------+------------+------------+---------------+---------------+-------------+-------------+----------------+-------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q76.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q76.snap new file mode 100644 index 0000000000..6b6d6a60b0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q76.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q76" +--- ++---------+---------------------+--------+-------+------------+-----------+-----------+ +| channel | col_name | d_year | d_qoy | i_category | sales_cnt | sales_amt | ++---------+---------------------+--------+-------+------------+-----------+-----------+ +| catalog | cs_bill_customer_sk | 1998 | 1 | Music | 1 | 2289.60 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Sports | 2 | 20528.20 | +| catalog | cs_bill_customer_sk | 1998 | 2 | Books | 1 | 2108.00 | +| catalog | cs_bill_customer_sk | 1998 | 2 | Music | 1 | 7169.65 | +| catalog | cs_bill_customer_sk | 1998 | 2 | Shoes | 1 | | +| catalog | cs_bill_customer_sk | 1998 | 2 | Sports | 1 | 5081.44 | +| catalog | cs_bill_customer_sk | 1998 | 2 | Women | 1 | | +| catalog | cs_bill_customer_sk | 1998 | 4 | Books | 1 | | +| catalog | cs_bill_customer_sk | 1998 | 4 | Children | 2 | 37.34 | +| catalog | cs_bill_customer_sk | 1998 | 4 | Jewelry | 1 | | ++---------+---------------------+--------+-------+------------+-----------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q78.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q78.snap new file mode 100644 index 0000000000..2fce52bf41 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q78.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q78" +--- ++----------------+-------+-----------+----------------------+-------------------+----------------+---------------------------+------------------------+ +| ss_customer_sk | ratio | store_qty | store_wholesale_cost | store_sales_price | other_chan_qty | other_chan_wholesale_cost | other_chan_sales_price | ++----------------+-------+-----------+----------------------+-------------------+----------------+---------------------------+------------------------+ +| 3 | 1.0 | 95 | 82.04 | 82.51 | 66 | 32.54 | 25.53 | +| 5 | 2.0 | 74 | 56.23 | 10.23 | 25 | 53.77 | 26.61 | +| 5 | 1.0 | 59 | 66.37 | 20.28 | 50 | 57.58 | 57.82 | +| 5 | 0.0 | 39 | 34.66 | 7.73 | 44 | 39.36 | 27.76 | +| 5 | 0.0 | 34 | 58.73 | 36.20 | 63 | 91.22 | 95.79 | +| 21 | 2.0 | 97 | 46.28 | 14.71 | 37 | 53.36 | 52.31 | +| 21 | 0.0 | 49 | 44.90 | 19.79 | 81 | 23.27 | 2.87 | +| 34 | 0.0 | 39 | 44.79 | 38.52 | 85 | 79.56 | 67.75 | +| 41 | 1.0 | 81 | 52.57 | 14.01 | 76 | 58.82 | 52.86 | +| 41 | 1.0 | 80 | 15.90 | 3.31 | 66 | 6.24 | 2.57 | ++----------------+-------+-----------+----------------------+-------------------+----------------+---------------------------+------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q79.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q79.snap new file mode 100644 index 0000000000..1cdf2e07d1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q79.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q79" +--- ++-------------+--------------+--------------------------------------+------------------+---------+-----------+ +| c_last_name | c_first_name | substr(ms.s_city,Int64(1),Int64(30)) | ss_ticket_number | amt | profit | ++-------------+--------------+--------------------------------------+------------------+---------+-----------+ +| Adams | Donald | Midway | 791 | 2998.05 | -14582.72 | +| Austin | Isela | Midway | 2338 | 7797.18 | -18347.59 | +| Austin | Isela | Midway | 2338 | 0.00 | | +| Buchanan | Alvin | Midway | 2216 | 138.30 | -7505.52 | +| Byrd | Craig | Midway | 859 | 724.38 | -21096.53 | +| Davis | Wanda | Midway | 1545 | 701.86 | -20047.83 | +| Douglas | Ashley | Midway | 1428 | 7199.42 | -10955.13 | +| Eller | Christopher | Midway | 1114 | 685.19 | -4589.30 | +| Flynn | Clifford | Midway | 75 | 446.84 | -11522.64 | +| Foster | | Midway | 1167 | 250.90 | -6909.18 | ++-------------+--------------+--------------------------------------+------------------+---------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q81.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q81.snap new file mode 100644 index 0000000000..478914599c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q81.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q81" +--- ++------------------+--------------+--------------+-------------+------------------+----------------+----------------+-----------------+--------------+-------------------+----------+--------+---------------+---------------+------------------+------------------+ +| c_customer_id | c_salutation | c_first_name | c_last_name | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_location_type | ctr_total_return | ++------------------+--------------+--------------+-------------+------------------+----------------+----------------+-----------------+--------------+-------------------+----------+--------+---------------+---------------+------------------+------------------+ +| AAAAAAAACNAAAAAA | Ms. | Diane | Blount | 730 | 4th Church | Ln | Suite B | Stringtown | Montgomery County | TX | 70162 | United States | -6.00 | single family | 1992.70 | +| AAAAAAAADIAAAAAA | Mrs. | Christine | Walton | 992 | View Ash | Parkway | Suite J | Forest Hills | Hall County | TX | 79237 | United States | -6.00 | single family | 1318.09 | +| AAAAAAAAEMDAAAAA | Dr. | Aline | Ramos | 594 | Cherry Main | Road | Suite R | Newport | Montgomery County | TX | 71521 | United States | -6.00 | single family | 1584.16 | +| AAAAAAAAJKCAAAAA | Ms. | Rochel | Smith | 858 | Sunset Main | Way | Suite 320 | Enterprise | Hardin County | TX | 71757 | United States | -6.00 | single family | 5193.11 | +| AAAAAAAANIDAAAAA | Miss | Andra | Hailey | 470 | Jefferson | Parkway | Suite 180 | Riverside | Hutchinson County | TX | 79231 | United States | -6.00 | condo | 278.37 | ++------------------+--------------+--------------+-------------+------------------+----------------+----------------+-----------------+--------------+-------------------+----------+--------+---------------+---------------+------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q82.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q82.snap new file mode 100644 index 0000000000..3c1d5a5734 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q82.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q82" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q83.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q83.snap new file mode 100644 index 0000000000..8053526953 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q83.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q83" +--- ++------------------+-------------+--------+-------------+--------+-------------+--------+--------------------+ +| item_id | sr_item_qty | sr_dev | cr_item_qty | cr_dev | wr_item_qty | wr_dev | average | ++------------------+-------------+--------+-------------+--------+-------------+--------+--------------------+ +| AAAAAAAACDAAAAAA | 9 | 0.0 | 1 | 0.0 | 55 | 0.0 | 21.666666666666668 | +| AAAAAAAAKHAAAAAA | | | 37 | | 2 | | | ++------------------+-------------+--------+-------------+--------+-------------+--------+--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q84.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q84.snap new file mode 100644 index 0000000000..0111c2ac8e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q84.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q84" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q85.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q85.snap new file mode 100644 index 0000000000..a3860439be --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q85.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q85" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q88.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q88.snap new file mode 100644 index 0000000000..2f25585c49 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q88.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q88" +--- ++------------+------------+-------------+--------------+--------------+--------------+--------------+--------------+ +| h8_30_to_9 | h9_to_9_30 | h9_30_to_10 | h10_to_10_30 | h10_30_to_11 | h11_to_11_30 | h11_30_to_12 | h12_to_12_30 | ++------------+------------+-------------+--------------+--------------+--------------+--------------+--------------+ +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ++------------+------------+-------------+--------------+--------------+--------------+--------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q89.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q89.snap new file mode 100644 index 0000000000..9adff59cee --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q89.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q89" +--- ++-------------+-----------+-----------------------+--------------+----------------+-------+-----------+-------------------+ +| i_category | i_class | i_brand | s_store_name | s_company_name | d_moy | sum_sales | avg_monthly_sales | ++-------------+-----------+-----------------------+--------------+----------------+-------+-----------+-------------------+ +| Music | classical | edu packscholar #2 | ought | Unknown | 4 | 97.34 | 609.269167 | +| Music | classical | edu packscholar #2 | ought | Unknown | 2 | 114.65 | 609.269167 | +| Music | classical | edu packscholar #2 | ought | Unknown | 6 | 226.78 | 609.269167 | +| Music | classical | edu packscholar #2 | ought | Unknown | 7 | 312.28 | 609.269167 | +| Electronics | audio | edu packunivamalg #11 | ought | Unknown | 6 | 21.66 | 198.143333 | +| Music | classical | edu packscholar #2 | ought | Unknown | 5 | 461.09 | 609.269167 | +| Electronics | audio | edu packunivamalg #11 | ought | Unknown | 4 | 67.19 | 198.143333 | +| Electronics | audio | edu packunivamalg #11 | ought | Unknown | 3 | 78.57 | 198.143333 | +| Music | classical | edu packscholar #2 | ought | Unknown | 3 | 491.89 | 609.269167 | +| Electronics | audio | edu packunivamalg #11 | ought | Unknown | 5 | 81.22 | 198.143333 | ++-------------+-----------+-----------------------+--------------+----------------+-------+-----------+-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q9.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q9.snap new file mode 100644 index 0000000000..c492a70a01 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q9.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q9" +--- ++-------------+------------+------------+--------------+--------------+ +| bucket1 | bucket2 | bucket3 | bucket4 | bucket5 | ++-------------+------------+------------+--------------+--------------+ +| -162.240579 | 105.717631 | 198.330831 | -1178.708247 | -1467.157090 | ++-------------+------------+------------+--------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q90.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q90.snap new file mode 100644 index 0000000000..093df64ec3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q90.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q90" +--- ++-------------+ +| am_pm_ratio | ++-------------+ +| 0.00000000 | ++-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q91.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q91.snap new file mode 100644 index 0000000000..77b7c543e3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q91.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q91" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q92.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q92.snap new file mode 100644 index 0000000000..58f702834c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q92.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q92" +--- ++------------------------+ +| Excess Discount Amount | ++------------------------+ +| | ++------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q93.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q93.snap new file mode 100644 index 0000000000..441f4282d2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q93.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q93" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q94.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q94.snap new file mode 100644 index 0000000000..a173983306 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q94.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q94" +--- ++-------------+---------------------+------------------+ +| order count | total shipping cost | total net profit | ++-------------+---------------------+------------------+ +| 0 | | | ++-------------+---------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q95.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q95.snap new file mode 100644 index 0000000000..755dee6c70 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q95.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q95" +--- ++-------------+---------------------+------------------+ +| order count | total shipping cost | total net profit | ++-------------+---------------------+------------------+ +| 0 | | | ++-------------+---------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q96.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q96.snap new file mode 100644 index 0000000000..4cff75784b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q96.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q96" +--- ++----------+ +| count(*) | ++----------+ +| 0 | ++----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q97.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q97.snap new file mode 100644 index 0000000000..16fc5a26c5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q97.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q97" +--- ++------------+--------------+-------------------+ +| store_only | catalog_only | store_and_catalog | ++------------+--------------+-------------------+ +| 5469 | 3246 | 188 | ++------------+--------------+-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q98.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q98.snap new file mode 100644 index 0000000000..ac290206e0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q98.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q98" +--- ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+----------------+-----------------+-------------+--------------+ +| i_item_id | i_item_desc | i_category | i_class | i_current_price | itemrevenue | revenueratio | ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+----------------+-----------------+-------------+--------------+ +| AAAAAAAAABAAAAAA | Unquestionably different demands may not turn worldwide false, wide police. Satisfied, littl | Men | accessories | 6.49 | 10116.51 | 28.960025 | +| AAAAAAAAFCAAAAAA | Strict, strong results may think even nervous husbands. Other, sexua | Men | accessories | 2.42 | 2676.00 | 7.660451 | +| AAAAAAAAFIAAAAAA | Papers could not invade just from a wishes. Plants increase remarkably great, important exercises. Tracks should give only | Men | accessories | 3.12 | 7950.75 | 22.760213 | +| AAAAAAAAIFAAAAAA | Holy companies win less all right essential initiatives. Men learn. Eyes might come opportunities; great, large centres should | Men | accessories | 4.79 | 6851.30 | 19.612872 | +| AAAAAAAAMKAAAAAA | Automatic, black developments get thus new profits. Chemicals describe widely similar temperatures. Easy features used to emphasize different | Men | accessories | 1.75 | 7338.11 | 21.006439 | +| AAAAAAAAFFAAAAAA | Only colleges support then institutions; correct, great processes seem perhaps national boys. Cattle | Men | pants | 39.31 | 6882.35 | 100.000000 | +| AAAAAAAAEAAAAAAA | Passengers want etc in a walls. Important years must benefit clear by a ideas; hot children must avoid. Major, bad pounds rise on the needs. Farms may not see bright lines. Differ | Men | shirts | 4.00 | 4300.34 | 100.000000 | +| AAAAAAAADBAAAAAA | Patient | Men | sports-apparel | 10.61 | 2550.24 | 7.795778 | +| AAAAAAAADKAAAAAA | Windows report easily; diplomatic years use | Men | sports-apparel | 75.25 | 9418.60 | 28.791533 | +| AAAAAAAAEEAAAAAA | Labour agents take. Fairly general ques | Men | sports-apparel | 6.93 | 8825.92 | 26.979781 | ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+----------------+-----------------+-------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q99.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q99.snap new file mode 100644 index 0000000000..d72ad3b58b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__file[parquet]-sqlite[memory]_tpcds_q99.snap @@ -0,0 +1,14 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q99" +--- ++-------------------------------------------------------+-----------+----------+---------+------------+------------+-------------+-----------+ +| substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) | sm_type | cc_name | 30 days | 31-60 days | 61-90 days | 91-120 days | >120 days | ++-------------------------------------------------------+-----------+----------+---------+------------+------------+-------------+-----------+ +| Conventional childr | EXPRESS | NY Metro | 241 | 271 | 261 | 0 | 0 | +| Conventional childr | LIBRARY | NY Metro | 178 | 185 | 178 | 0 | 0 | +| Conventional childr | NEXT DAY | NY Metro | 274 | 244 | 267 | 0 | 0 | +| Conventional childr | OVERNIGHT | NY Metro | 201 | 177 | 199 | 0 | 0 | +| Conventional childr | REGULAR | NY Metro | 183 | 199 | 194 | 0 | 0 | +| Conventional childr | TWO DAY | NY Metro | 182 | 173 | 191 | 0 | 0 | ++-------------------------------------------------------+-----------+----------+---------+------------+------------+-------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q1.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q1.snap new file mode 100644 index 0000000000..ceb6b0cc1e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q1.snap @@ -0,0 +1,12 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q1" +--- ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ +| l_returnflag | l_linestatus | sum_qty | sum_base_price | sum_disc_price | sum_charge | avg_qty | avg_price | avg_disc | count_order | ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ +| A | F | 37734107.00 | 56586554400.73 | 53758257134.8700 | 55909065222.827692 | 25.522006 | 38273.129735 | 0.049985 | 1478493 | +| N | F | 991417.00 | 1487504710.38 | 1413082168.0541 | 1469649223.194375 | 25.516472 | 38284.467761 | 0.050093 | 38854 | +| N | O | 74476040.00 | 111701729697.74 | 106118230307.6056 | 110367043872.497010 | 25.502227 | 38249.117989 | 0.049997 | 2920374 | +| R | F | 37719753.00 | 56568041380.90 | 53741292684.6040 | 55889619119.831932 | 25.505794 | 38250.854626 | 0.050009 | 1478870 | ++--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q10.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q10.snap new file mode 100644 index 0000000000..26b9181de4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q10.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q10" +--- ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ +| c_custkey | c_name | revenue | c_acctbal | n_name | c_address | c_phone | c_comment | ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ +| 57040 | Customer#000057040 | 734235.2455 | 632.87 | JAPAN | nICtsILWBB | 22-895-641-3466 | ep. blithely regular foxes promise slyly furiously ironic depend | +| 143347 | Customer#000143347 | 721002.6948 | 2557.47 | EGYPT | ,Q9Ml3w0gvX | 14-742-935-3718 | endencies sleep. slyly express deposits nag carefully around the even tithes. slyly regular | +| 60838 | Customer#000060838 | 679127.3077 | 2454.77 | BRAZIL | VWmQhWweqj5hFpcvhGFBeOY9hJ4m | 12-913-494-9813 | tes. final instructions nag quickly according to | +| 101998 | Customer#000101998 | 637029.5667 | 3790.89 | UNITED KINGDOM | 0,ORojfDdyMca2E2H | 33-593-865-6378 | ost carefully. slyly regular packages cajole about the blithely final ideas. permanently daring deposit | +| 125341 | Customer#000125341 | 633508.0860 | 4983.51 | GERMANY | 9YRcnoUPOM7Sa8xymhsDHdQg | 17-582-695-5962 | ly furiously brave packages. quickly regular dugouts kindle furiously carefully bold theodolites. | +| 25501 | Customer#000025501 | 620269.7849 | 7725.04 | ETHIOPIA | sr4VVVe3xCJQ2oo2QEhi19D,pXqo6kOGaSn2 | 15-874-808-6793 | y ironic foxes hinder according to the furiously permanent dolphins. pending ideas integrate blithely from | +| 115831 | Customer#000115831 | 596423.8672 | 5098.10 | FRANCE | AlMpPnmtGrOFrDMUs5VLo EIA,Cg,Rw5TBuBoKiO | 16-715-386-3788 | unts nag carefully final packages. express theodolites are regular ac | +| 84223 | Customer#000084223 | 594998.0239 | 528.65 | UNITED KINGDOM | Eq51o UpQ4RBr fYTdrZApDsPV4pQyuPq | 33-442-824-8191 | longside of the slyly final deposits. blithely final platelets about the blithely i | +| 54289 | Customer#000054289 | 585603.3918 | 5583.02 | IRAN | x3ouCpz6,pRNVhajr0CCQG1 | 20-834-292-4707 | cajole furiously after the quickly unusual fo | +| 39922 | Customer#000039922 | 584878.1134 | 7321.11 | GERMANY | 2KtWzW,FYkhdWBfobp6SFXWYKjvU9 | 17-147-757-8036 | ironic deposits sublate furiously. carefully regular theodolites along the b | ++-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q11.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q11.snap new file mode 100644 index 0000000000..0974bf70e5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q11.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q11" +--- ++------------+-------------+ +| ps_partkey | value | ++------------+-------------+ +| 129760 | 17538456.86 | +| 166726 | 16503353.92 | +| 191287 | 16474801.97 | +| 161758 | 16101755.54 | +| 34452 | 15983844.72 | +| 139035 | 15907078.34 | +| 9403 | 15451755.62 | +| 154358 | 15212937.88 | +| 38823 | 15064802.86 | +| 85606 | 15053957.15 | ++------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q12.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q12.snap new file mode 100644 index 0000000000..ef557741c7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q12.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q12" +--- ++------------+-----------------+----------------+ +| l_shipmode | high_line_count | low_line_count | ++------------+-----------------+----------------+ +| MAIL | 6202 | 9324 | +| SHIP | 6200 | 9262 | ++------------+-----------------+----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q13.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q13.snap new file mode 100644 index 0000000000..6e20cea9dc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q13.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q13" +--- ++---------+----------+ +| c_count | custdist | ++---------+----------+ +| 0 | 50004 | +| 10 | 6668 | +| 9 | 6563 | +| 11 | 6004 | +| 8 | 5890 | +| 12 | 5600 | +| 13 | 5029 | +| 19 | 4805 | +| 7 | 4680 | +| 18 | 4531 | ++---------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q14.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q14.snap new file mode 100644 index 0000000000..f47a3733a6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q14.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q14" +--- ++--------------------+ +| promo_revenue | ++--------------------+ +| 16.380778626395543 | ++--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q16.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q16.snap new file mode 100644 index 0000000000..33cf0d5df0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q16.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q16" +--- ++----------+--------------------------+--------+--------------+ +| p_brand | p_type | p_size | supplier_cnt | ++----------+--------------------------+--------+--------------+ +| Brand#41 | MEDIUM BRUSHED TIN | 3 | 28 | +| Brand#54 | STANDARD BRUSHED COPPER | 14 | 27 | +| Brand#11 | STANDARD BRUSHED TIN | 23 | 24 | +| Brand#11 | STANDARD BURNISHED BRASS | 36 | 24 | +| Brand#15 | MEDIUM ANODIZED NICKEL | 3 | 24 | +| Brand#15 | SMALL ANODIZED BRASS | 45 | 24 | +| Brand#15 | SMALL BURNISHED NICKEL | 19 | 24 | +| Brand#21 | MEDIUM ANODIZED COPPER | 3 | 24 | +| Brand#22 | SMALL BRUSHED NICKEL | 3 | 24 | +| Brand#22 | SMALL BURNISHED BRASS | 19 | 24 | ++----------+--------------------------+--------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q17.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q17.snap new file mode 100644 index 0000000000..d3ff4d6b5a --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q17.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q17" +--- ++-------------------+ +| avg_yearly | ++-------------------+ +| 348406.0542857143 | ++-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q18.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q18.snap new file mode 100644 index 0000000000..e32e26b475 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q18.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q18" +--- ++--------------------+-----------+------------+-------------+--------------+--------------------------+ +| c_name | c_custkey | o_orderkey | o_orderdate | o_totalprice | sum(lineitem.l_quantity) | ++--------------------+-----------+------------+-------------+--------------+--------------------------+ +| Customer#000128120 | 128120 | 4722021 | 1994-04-07 | 544089.09 | 323.00 | +| Customer#000144617 | 144617 | 3043270 | 1997-02-12 | 530604.44 | 317.00 | +| Customer#000013940 | 13940 | 2232932 | 1997-04-13 | 522720.61 | 304.00 | +| Customer#000066790 | 66790 | 2199712 | 1996-09-30 | 515531.82 | 327.00 | +| Customer#000046435 | 46435 | 4745607 | 1997-07-03 | 508047.99 | 309.00 | +| Customer#000015272 | 15272 | 3883783 | 1993-07-28 | 500241.33 | 302.00 | +| Customer#000146608 | 146608 | 3342468 | 1994-06-12 | 499794.58 | 303.00 | +| Customer#000096103 | 96103 | 5984582 | 1992-03-16 | 494398.79 | 312.00 | +| Customer#000024341 | 24341 | 1474818 | 1992-11-15 | 491348.26 | 302.00 | +| Customer#000137446 | 137446 | 5489475 | 1997-05-23 | 487763.25 | 311.00 | ++--------------------+-----------+------------+-------------+--------------+--------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q19.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q19.snap new file mode 100644 index 0000000000..af10cb1f7e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q19.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q19" +--- ++--------------+ +| revenue | ++--------------+ +| 3083843.0578 | ++--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q2.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q2.snap new file mode 100644 index 0000000000..962ec44959 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q2.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q2" +--- ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ +| s_acctbal | s_name | n_name | p_partkey | p_mfgr | s_address | s_phone | s_comment | ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ +| 9938.53 | Supplier#000005359 | UNITED KINGDOM | 185358 | Manufacturer#4 | bgxj2K0w1kJvxYl5mhCfou,W | 33-429-790-6131 | l, ironic instructions cajole | +| 9937.84 | Supplier#000005969 | ROMANIA | 108438 | Manufacturer#1 | rdnmd9c8EG1EIAYY3LPVa4yUNx6OwyVaQ | 29-520-692-3537 | es. furiously silent deposits among the deposits haggle furiously a | +| 9936.22 | Supplier#000005250 | UNITED KINGDOM | 249 | Manufacturer#4 | qX AB0vP8mJEWeBuY9jri | 33-320-228-2957 | ar, regular requests nag blithely special accounts. final deposits impress carefully. ironic, | +| 9923.77 | Supplier#000002324 | GERMANY | 29821 | Manufacturer#4 | uXcnR7tv87dG | 17-779-299-1839 | s sleep according to the quick requests. carefully | +| 9871.22 | Supplier#000006373 | GERMANY | 43868 | Manufacturer#5 | iSLO35z7Ae | 17-813-485-8637 | against the slyly daring requests. unusual accounts wake atop the blithely spe | +| 9870.78 | Supplier#000001286 | GERMANY | 81285 | Manufacturer#2 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9870.78 | Supplier#000001286 | GERMANY | 181285 | Manufacturer#4 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9852.52 | Supplier#000008973 | RUSSIA | 18972 | Manufacturer#2 | zVfUT3Np22kUC05tYWHBotaR | 32-188-594-7038 | ly daring excuses unwind carefully above the fu | +| 9847.83 | Supplier#000008097 | RUSSIA | 130557 | Manufacturer#2 | veMRTQBmUResNvfD3 | 32-375-640-3593 | slyly ironic, special requests. final instructions above the qu | +| 9847.57 | Supplier#000006345 | FRANCE | 86344 | Manufacturer#1 | 68yX tGXAkVRSxUGNSjJdptw 8O878xaFnaoQK | 16-886-766-7945 | odolites. blithely special requests above the regular foxes sleep unusual sauternes. care | ++-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q20.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q20.snap new file mode 100644 index 0000000000..7bcc73e575 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q20.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q20" +--- ++--------------------+--------------------------------------+ +| s_name | s_address | ++--------------------+--------------------------------------+ +| Supplier#000000020 | JtPqm19E7tF 152Rl1wQZ8j0H | +| Supplier#000000091 | 35WVnU7GLNbQDcc2TARavGtk6RB6ZCd46UAY | +| Supplier#000000205 | Alrx5TN,hdnG | +| Supplier#000000285 | q TMZEDyZtv vUiFKBhT3NJlnIxpL | +| Supplier#000000287 | UQR8bUA4V2HxVbw9K | +| Supplier#000000354 | wSLcCW40Q8 | +| Supplier#000000378 | mLPJtpu4wOc cSFzBR | +| Supplier#000000402 | JR8vWoCteJtJg3okRpt0r28KEo | +| Supplier#000000530 | 0BvoewCPg2scOEfuL93FRKqSxHmdhw1 | +| Supplier#000000555 | 8Lp0QWPLFXrJrX1sTWkAEdzUsh5ke | ++--------------------+--------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q21.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q21.snap new file mode 100644 index 0000000000..f22be1b03e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q21.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q21" +--- ++--------------------+---------+ +| s_name | numwait | ++--------------------+---------+ +| Supplier#000002829 | 20 | +| Supplier#000005808 | 18 | +| Supplier#000000262 | 17 | +| Supplier#000000496 | 17 | +| Supplier#000002160 | 17 | +| Supplier#000002301 | 17 | +| Supplier#000002540 | 17 | +| Supplier#000003063 | 17 | +| Supplier#000005178 | 17 | +| Supplier#000008331 | 17 | ++--------------------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q22.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q22.snap new file mode 100644 index 0000000000..42b3e909ca --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q22.snap @@ -0,0 +1,15 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q22" +--- ++-----------+---------+------------+ +| cntrycode | numcust | totacctbal | ++-----------+---------+------------+ +| 13 | 888 | 6737713.99 | +| 17 | 861 | 6460573.72 | +| 18 | 964 | 7236687.40 | +| 23 | 892 | 6701457.95 | +| 29 | 948 | 7158866.63 | +| 30 | 909 | 6808436.13 | +| 31 | 922 | 6806670.18 | ++-----------+---------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q3.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q3.snap new file mode 100644 index 0000000000..8c5687347d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q3.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q3" +--- ++------------+-------------+-------------+----------------+ +| l_orderkey | revenue | o_orderdate | o_shippriority | ++------------+-------------+-------------+----------------+ +| 2456423 | 406181.0111 | 1995-03-05 | 0 | +| 3459808 | 405838.6989 | 1995-03-04 | 0 | +| 492164 | 390324.0610 | 1995-02-19 | 0 | +| 1188320 | 384537.9359 | 1995-03-09 | 0 | +| 2435712 | 378673.0558 | 1995-02-26 | 0 | +| 4878020 | 378376.7952 | 1995-03-12 | 0 | +| 5521732 | 375153.9215 | 1995-03-13 | 0 | +| 2628192 | 373133.3094 | 1995-02-22 | 0 | +| 993600 | 371407.4595 | 1995-03-05 | 0 | +| 2300070 | 367371.1452 | 1995-03-13 | 0 | ++------------+-------------+-------------+----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q4.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q4.snap new file mode 100644 index 0000000000..c45db96ed8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q4.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q4" +--- ++-----------------+-------------+ +| o_orderpriority | order_count | ++-----------------+-------------+ +| 1-URGENT | 10594 | +| 2-HIGH | 10476 | +| 3-MEDIUM | 10410 | +| 4-NOT SPECIFIED | 10556 | +| 5-LOW | 10487 | ++-----------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q5.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q5.snap new file mode 100644 index 0000000000..3d1658acf6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q5.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q5" +--- ++-----------+---------------+ +| n_name | revenue | ++-----------+---------------+ +| INDONESIA | 55502041.1697 | +| VIETNAM | 55295086.9967 | +| CHINA | 53724494.2566 | +| INDIA | 52035512.0002 | +| JAPAN | 45410175.6954 | ++-----------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q6.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q6.snap new file mode 100644 index 0000000000..757b91629c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q6.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q6" +--- ++----------------+ +| revenue | ++----------------+ +| 123141078.2283 | ++----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q7.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q7.snap new file mode 100644 index 0000000000..78cf8c2674 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q7.snap @@ -0,0 +1,12 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q7" +--- ++-------------+-------------+--------+---------------+ +| supp_nation | cust_nation | l_year | revenue | ++-------------+-------------+--------+---------------+ +| FRANCE | GERMANY | 1995 | 54639732.7336 | +| FRANCE | GERMANY | 1996 | 54633083.3076 | +| GERMANY | FRANCE | 1995 | 52531746.6697 | +| GERMANY | FRANCE | 1996 | 52520549.0224 | ++-------------+-------------+--------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q8.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q8.snap new file mode 100644 index 0000000000..7aba8e1b49 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q8.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q8" +--- ++--------+------------+ +| o_year | mkt_share | ++--------+------------+ +| 1995 | 0.03443589 | +| 1996 | 0.04148552 | ++--------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q9.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q9.snap new file mode 100644 index 0000000000..07281b8877 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-duckdb[file]_tpch_q9.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpch_q9" +--- ++-----------+--------+---------------+ +| nation | o_year | sum_profit | ++-----------+--------+---------------+ +| ALGERIA | 1998 | 27136900.1803 | +| ALGERIA | 1997 | 48611833.4962 | +| ALGERIA | 1996 | 48285482.6782 | +| ALGERIA | 1995 | 44402273.5999 | +| ALGERIA | 1994 | 48694008.0668 | +| ALGERIA | 1993 | 46044207.7838 | +| ALGERIA | 1992 | 45636849.4881 | +| ARGENTINA | 1998 | 28341663.7848 | +| ARGENTINA | 1997 | 47143964.1176 | +| ARGENTINA | 1996 | 45255278.6021 | ++-----------+--------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q10.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q10.snap index 547c20939d..26b9181de4 100644 --- a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q10.snap +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q10.snap @@ -5,14 +5,14 @@ description: "Query: tpch_q10" +-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ | c_custkey | c_name | revenue | c_acctbal | n_name | c_address | c_phone | c_comment | +-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ -| 57040 | Customer#000057040 | 734235.2455 | 632.87 | JAPAN | Eioyzjf4pp | 22-895-641-3466 | sits. slyly regular requests sleep alongside of the regular inst | -| 143347 | Customer#000143347 | 721002.6948 | 2557.47 | EGYPT | 1aReFYv,Kw4 | 14-742-935-3718 | ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re | -| 60838 | Customer#000060838 | 679127.3077 | 2454.77 | BRAZIL | 64EaJ5vMAHWJlBOxJklpNc2RJiWE | 12-913-494-9813 | need to boost against the slyly regular account | -| 101998 | Customer#000101998 | 637029.5667 | 3790.89 | UNITED KINGDOM | 01c9CILnNtfOQYmZj | 33-593-865-6378 | ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites | -| 125341 | Customer#000125341 | 633508.0860 | 4983.51 | GERMANY | S29ODD6bceU8QSuuEJznkNaK | 17-582-695-5962 | arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca | -| 25501 | Customer#000025501 | 620269.7849 | 7725.04 | ETHIOPIA | W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ | 15-874-808-6793 | he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina | -| 115831 | Customer#000115831 | 596423.8672 | 5098.10 | FRANCE | rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc | 16-715-386-3788 | l somas sleep. furiously final deposits wake blithely regular pinto b | -| 84223 | Customer#000084223 | 594998.0239 | 528.65 | UNITED KINGDOM | nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA | 33-442-824-8191 | slyly final deposits haggle regular, pending dependencies. pending escapades wake | -| 54289 | Customer#000054289 | 585603.3918 | 5583.02 | IRAN | vXCxoCsU0Bad5JQI ,oobkZ | 20-834-292-4707 | ely special foxes are quickly finally ironic p | -| 39922 | Customer#000039922 | 584878.1134 | 7321.11 | GERMANY | Zgy4s50l2GKN4pLDPBU8m342gIw6R | 17-147-757-8036 | y final requests. furiously final foxes cajole blithely special platelets. f | +| 57040 | Customer#000057040 | 734235.2455 | 632.87 | JAPAN | nICtsILWBB | 22-895-641-3466 | ep. blithely regular foxes promise slyly furiously ironic depend | +| 143347 | Customer#000143347 | 721002.6948 | 2557.47 | EGYPT | ,Q9Ml3w0gvX | 14-742-935-3718 | endencies sleep. slyly express deposits nag carefully around the even tithes. slyly regular | +| 60838 | Customer#000060838 | 679127.3077 | 2454.77 | BRAZIL | VWmQhWweqj5hFpcvhGFBeOY9hJ4m | 12-913-494-9813 | tes. final instructions nag quickly according to | +| 101998 | Customer#000101998 | 637029.5667 | 3790.89 | UNITED KINGDOM | 0,ORojfDdyMca2E2H | 33-593-865-6378 | ost carefully. slyly regular packages cajole about the blithely final ideas. permanently daring deposit | +| 125341 | Customer#000125341 | 633508.0860 | 4983.51 | GERMANY | 9YRcnoUPOM7Sa8xymhsDHdQg | 17-582-695-5962 | ly furiously brave packages. quickly regular dugouts kindle furiously carefully bold theodolites. | +| 25501 | Customer#000025501 | 620269.7849 | 7725.04 | ETHIOPIA | sr4VVVe3xCJQ2oo2QEhi19D,pXqo6kOGaSn2 | 15-874-808-6793 | y ironic foxes hinder according to the furiously permanent dolphins. pending ideas integrate blithely from | +| 115831 | Customer#000115831 | 596423.8672 | 5098.10 | FRANCE | AlMpPnmtGrOFrDMUs5VLo EIA,Cg,Rw5TBuBoKiO | 16-715-386-3788 | unts nag carefully final packages. express theodolites are regular ac | +| 84223 | Customer#000084223 | 594998.0239 | 528.65 | UNITED KINGDOM | Eq51o UpQ4RBr fYTdrZApDsPV4pQyuPq | 33-442-824-8191 | longside of the slyly final deposits. blithely final platelets about the blithely i | +| 54289 | Customer#000054289 | 585603.3918 | 5583.02 | IRAN | x3ouCpz6,pRNVhajr0CCQG1 | 20-834-292-4707 | cajole furiously after the quickly unusual fo | +| 39922 | Customer#000039922 | 584878.1134 | 7321.11 | GERMANY | 2KtWzW,FYkhdWBfobp6SFXWYKjvU9 | 17-147-757-8036 | ironic deposits sublate furiously. carefully regular theodolites along the b | +-----------+--------------------+-------------+-----------+----------------+------------------------------------------+-----------------+-------------------------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q13.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q13.snap index c5722a5982..6e20cea9dc 100644 --- a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q13.snap +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q13.snap @@ -5,14 +5,14 @@ description: "Query: tpch_q13" +---------+----------+ | c_count | custdist | +---------+----------+ -| 0 | 50005 | -| 9 | 6641 | -| 10 | 6532 | -| 11 | 6014 | -| 8 | 5937 | -| 12 | 5639 | -| 13 | 5024 | -| 19 | 4793 | -| 7 | 4687 | -| 17 | 4587 | +| 0 | 50004 | +| 10 | 6668 | +| 9 | 6563 | +| 11 | 6004 | +| 8 | 5890 | +| 12 | 5600 | +| 13 | 5029 | +| 19 | 4805 | +| 7 | 4680 | +| 18 | 4531 | +---------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q2.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q2.snap index 88415fe937..962ec44959 100644 --- a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q2.snap +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q2.snap @@ -5,14 +5,14 @@ description: "Query: tpch_q2" +-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ | s_acctbal | s_name | n_name | p_partkey | p_mfgr | s_address | s_phone | s_comment | +-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ -| 9938.53 | Supplier#000005359 | UNITED KINGDOM | 185358 | Manufacturer#4 | QKuHYh,vZGiwu2FWEJoLDx04 | 33-429-790-6131 | uriously regular requests hag | -| 9937.84 | Supplier#000005969 | ROMANIA | 108438 | Manufacturer#1 | ANDENSOSmk,miq23Xfb5RWt6dvUcvt6Qa | 29-520-692-3537 | efully express instructions. regular requests against the slyly fin | -| 9936.22 | Supplier#000005250 | UNITED KINGDOM | 249 | Manufacturer#4 | B3rqp0xbSEim4Mpy2RH J | 33-320-228-2957 | etect about the furiously final accounts. slyly ironic pinto beans sleep inside the furiously | -| 9923.77 | Supplier#000002324 | GERMANY | 29821 | Manufacturer#4 | y3OD9UywSTOk | 17-779-299-1839 | ackages boost blithely. blithely regular deposits c | -| 9871.22 | Supplier#000006373 | GERMANY | 43868 | Manufacturer#5 | J8fcXWsTqM | 17-813-485-8637 | etect blithely bold asymptotes. fluffily ironic platelets wake furiously; blit | -| 9870.78 | Supplier#000001286 | GERMANY | 81285 | Manufacturer#2 | YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH | 17-516-924-4574 | regular accounts. furiously unusual courts above the fi | -| 9870.78 | Supplier#000001286 | GERMANY | 181285 | Manufacturer#4 | YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH | 17-516-924-4574 | regular accounts. furiously unusual courts above the fi | -| 9852.52 | Supplier#000008973 | RUSSIA | 18972 | Manufacturer#2 | t5L67YdBYYH6o,Vz24jpDyQ9 | 32-188-594-7038 | rns wake final foxes. carefully unusual depende | -| 9847.83 | Supplier#000008097 | RUSSIA | 130557 | Manufacturer#2 | xMe97bpE69NzdwLoX | 32-375-640-3593 | the special excuses. silent sentiments serve carefully final ac | -| 9847.57 | Supplier#000006345 | FRANCE | 86344 | Manufacturer#1 | VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag | 16-886-766-7945 | ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu | +| 9938.53 | Supplier#000005359 | UNITED KINGDOM | 185358 | Manufacturer#4 | bgxj2K0w1kJvxYl5mhCfou,W | 33-429-790-6131 | l, ironic instructions cajole | +| 9937.84 | Supplier#000005969 | ROMANIA | 108438 | Manufacturer#1 | rdnmd9c8EG1EIAYY3LPVa4yUNx6OwyVaQ | 29-520-692-3537 | es. furiously silent deposits among the deposits haggle furiously a | +| 9936.22 | Supplier#000005250 | UNITED KINGDOM | 249 | Manufacturer#4 | qX AB0vP8mJEWeBuY9jri | 33-320-228-2957 | ar, regular requests nag blithely special accounts. final deposits impress carefully. ironic, | +| 9923.77 | Supplier#000002324 | GERMANY | 29821 | Manufacturer#4 | uXcnR7tv87dG | 17-779-299-1839 | s sleep according to the quick requests. carefully | +| 9871.22 | Supplier#000006373 | GERMANY | 43868 | Manufacturer#5 | iSLO35z7Ae | 17-813-485-8637 | against the slyly daring requests. unusual accounts wake atop the blithely spe | +| 9870.78 | Supplier#000001286 | GERMANY | 81285 | Manufacturer#2 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9870.78 | Supplier#000001286 | GERMANY | 181285 | Manufacturer#4 | 3gq0mZLHI5OTM6 tBYmLTHZaulCYnlECzQ7nj | 17-516-924-4574 | into beans haggle at the quickly final asymptotes. unusu | +| 9852.52 | Supplier#000008973 | RUSSIA | 18972 | Manufacturer#2 | zVfUT3Np22kUC05tYWHBotaR | 32-188-594-7038 | ly daring excuses unwind carefully above the fu | +| 9847.83 | Supplier#000008097 | RUSSIA | 130557 | Manufacturer#2 | veMRTQBmUResNvfD3 | 32-375-640-3593 | slyly ironic, special requests. final instructions above the qu | +| 9847.57 | Supplier#000006345 | FRANCE | 86344 | Manufacturer#1 | 68yX tGXAkVRSxUGNSjJdptw 8O878xaFnaoQK | 16-886-766-7945 | odolites. blithely special requests above the regular foxes sleep unusual sauternes. care | +-----------+--------------------+----------------+-----------+----------------+----------------------------------------+-----------------+-----------------------------------------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q20.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q20.snap index a7388ee681..7bcc73e575 100644 --- a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q20.snap +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__mysql-federated_tpch_q20.snap @@ -5,14 +5,14 @@ description: "Query: tpch_q20" +--------------------+--------------------------------------+ | s_name | s_address | +--------------------+--------------------------------------+ -| Supplier#000000020 | iybAE,RmTymrZVYaFZva2SH,j | -| Supplier#000000091 | YV45D7TkfdQanOOZ7q9QxkyGUapU1oOWU6q3 | -| Supplier#000000205 | rF uV8d0JNEk | -| Supplier#000000285 | Br7e1nnt1yxrw6ImgpJ7YdhFDjuBf | -| Supplier#000000287 | 7a9SP7qW5Yku5PvSg | -| Supplier#000000354 | w8fOo5W,aS | -| Supplier#000000378 | FfbhyCxWvcPrO8ltp9 | -| Supplier#000000402 | i9Sw4DoyMhzhKXCH9By,AYSgmD | -| Supplier#000000530 | 0qwCMwobKY OcmLyfRXlagA8ukENJv, | -| Supplier#000000555 | TfB,a5bfl3Ah 3Z 74GqnNs6zKVGM | +| Supplier#000000020 | JtPqm19E7tF 152Rl1wQZ8j0H | +| Supplier#000000091 | 35WVnU7GLNbQDcc2TARavGtk6RB6ZCd46UAY | +| Supplier#000000205 | Alrx5TN,hdnG | +| Supplier#000000285 | q TMZEDyZtv vUiFKBhT3NJlnIxpL | +| Supplier#000000287 | UQR8bUA4V2HxVbw9K | +| Supplier#000000354 | wSLcCW40Q8 | +| Supplier#000000378 | mLPJtpu4wOc cSFzBR | +| Supplier#000000402 | JR8vWoCteJtJg3okRpt0r28KEo | +| Supplier#000000530 | 0BvoewCPg2scOEfuL93FRKqSxHmdhw1 | +| Supplier#000000555 | 8Lp0QWPLFXrJrX1sTWkAEdzUsh5ke | +--------------------+--------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q1.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q1.snap new file mode 100644 index 0000000000..f92fc5f906 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q1.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q1" +--- ++------------------+ +| c_customer_id | ++------------------+ +| AAAAAAAAAAADAAAA | +| AAAAAAAAAAAFAAAA | +| AAAAAAAAAAAFBAAA | +| AAAAAAAAAAAKAAAA | +| AAAAAAAAAAANAAAA | +| AAAAAAAAAABIBAAA | +| AAAAAAAAAABLAAAA | +| AAAAAAAAAABPAAAA | +| AAAAAAAAAABPAAAA | +| AAAAAAAAAACFBAAA | ++------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q10.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q10.snap new file mode 100644 index 0000000000..fa888c568e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q10.snap @@ -0,0 +1,16 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q10" +--- ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+--------------+------+-----------------------+------+----------------------+------+ +| cd_gender | cd_marital_status | cd_education_status | cnt1 | cd_purchase_estimate | cnt2 | cd_credit_rating | cnt3 | cd_dep_count | cnt4 | cd_dep_employed_count | cnt5 | cd_dep_college_count | cnt6 | ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+--------------+------+-----------------------+------+----------------------+------+ +| F | M | Advanced Degree | 1 | 7000 | 1 | Unknown | 1 | 5 | 1 | 4 | 1 | 0 | 1 | +| F | U | Secondary | 1 | 2000 | 1 | Good | 1 | 4 | 1 | 0 | 1 | 6 | 1 | +| M | S | 4 yr Degree | 1 | 1500 | 1 | Low Risk | 1 | 3 | 1 | 6 | 1 | 3 | 1 | +| M | U | Primary | 1 | 9000 | 1 | Good | 1 | 0 | 1 | 4 | 1 | 4 | 1 | +| M | W | 2 yr Degree | 1 | 5000 | 1 | Good | 1 | 5 | 1 | 4 | 1 | 0 | 1 | +| M | W | 2 yr Degree | 1 | 5000 | 1 | Low Risk | 1 | 6 | 1 | 0 | 1 | 5 | 1 | +| M | W | Advanced Degree | 1 | 6500 | 1 | High Risk | 1 | 1 | 1 | 0 | 1 | 3 | 1 | +| M | W | College | 1 | 7000 | 1 | Unknown | 1 | 2 | 1 | 3 | 1 | 2 | 1 | ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+--------------+------+-----------------------+------+----------------------+------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q11.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q11.snap new file mode 100644 index 0000000000..08c28d813e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q11.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q11" +--- ++------------------+---------------------+--------------------+-----------------------------------+ +| customer_id | customer_first_name | customer_last_name | customer_email_address | ++------------------+---------------------+--------------------+-----------------------------------+ +| AAAAAAAAAGEJAAAA | Michael | Tolbert | Michael.Tolbert@D8O5R.com | +| AAAAAAAAAGOLAAAA | Lawrence | Reed | Lawrence.Reed@4tUSGo1o.org | +| AAAAAAAAAHAGBAAA | Nilda | Bernal | Nilda.Bernal@afeQH6HuLAeQt.org | +| AAAAAAAAAHLFAAAA | Michelle | Early | Michelle.Early@XIPPlCYfJv.org | +| AAAAAAAAAIFBBAAA | Juana | Giles | Juana.Giles@D0JsFLeloECaxb.com | +| AAAAAAAAAJNGBAAA | Roger | Kaufman | Roger.Kaufman@rMosVj1GQS.org | +| AAAAAAAAAKOBBAAA | William | Alderman | William.Alderman@LHfDRblj.edu | +| AAAAAAAAALDHBAAA | Lori | Barrett | Lori.Barrett@XpjxdL.edu | +| AAAAAAAAANNNAAAA | Cindy | Julian | Cindy.Julian@ChEB5eyUCBe.org | +| AAAAAAAAAOGBAAAA | George | Johnston | George.Johnston@uxl3oglEmB1hA.org | ++------------------+---------------------+--------------------+-----------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q12.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q12.snap new file mode 100644 index 0000000000..5b2229653f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q12.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q12" +--- ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+---------+-----------------+-------------+--------------+ +| i_item_id | i_item_desc | i_category | i_class | i_current_price | itemrevenue | revenueratio | ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+---------+-----------------+-------------+--------------+ +| AAAAAAAAAKLBAAAA | Students take much indeed young resources. New, sexual parents hate low by a businesses. Integrate | Books | arts | 1.54 | 260.60 | 0.401954 | +| AAAAAAAABFHDAAAA | Still left years require even. Di | Books | arts | 2.58 | 1303.20 | 2.010080 | +| AAAAAAAACCMAAAAA | Powerfully consistent firms want less social, russian countries. Often positive u | Books | arts | 0.65 | 1116.36 | 1.721895 | +| AAAAAAAACDEEAAAA | Areas prevent from a trees. Intense friends should know often instead common eyes. Thus substantial steps influence particularly with a | Books | arts | 4.97 | 10910.71 | 16.828890 | +| AAAAAAAACMIDAAAA | Females mention personal, different techniques. Finally whole programmes would not run electric, vocational forms. Economically technical obligations could not give early members. Universal grounds | Books | arts | 5.87 | 468.18 | 0.722129 | +| AAAAAAAADCCDAAAA | Already similar lives take perhaps certain islands. Past thin facts find countries. Initial, steep shoulders ought to suggest concerned, hot references. Suitable | Books | arts | 7.18 | 2725.82 | 4.204357 | +| AAAAAAAADPCCAAAA | Bright, happy seconds slow available men; tensions see so mountains. Wo | Books | arts | 4.23 | 3148.48 | 4.856276 | +| AAAAAAAAEAEAAAAA | Different parties obtain insects. Too royal me | Books | arts | 1.09 | 1354.93 | 2.089870 | +| AAAAAAAAFBMBAAAA | Clinical families cope international newspapers. Again essential principles may not define usually current written books. There poli | Books | arts | 4.78 | 2574.69 | 3.971251 | +| AAAAAAAAFCKCAAAA | Here costly books must not correct thus necessary patterns. Other, monetary lovers can convey urgent blocks. Tomorrow recent years woul | Books | arts | 2.44 | 48.24 | 0.074406 | ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+---------+-----------------+-------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q13.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q13.snap new file mode 100644 index 0000000000..4e7a29620c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q13.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q13" +--- ++------------------------------+-------------------------------------+----------------------------------------+----------------------------------------+ +| avg(store_sales.ss_quantity) | avg(store_sales.ss_ext_sales_price) | avg(store_sales.ss_ext_wholesale_cost) | sum(store_sales.ss_ext_wholesale_cost) | ++------------------------------+-------------------------------------+----------------------------------------+----------------------------------------+ +| 41.0 | 2873.158750 | 2641.278750 | 21130.23 | ++------------------------------+-------------------------------------+----------------------------------------+----------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q15.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q15.snap new file mode 100644 index 0000000000..79dc5195e9 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q15.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q15" +--- ++--------+-----------------------------------+ +| ca_zip | sum(catalog_sales.cs_sales_price) | ++--------+-----------------------------------+ +| 30059 | 1003.96 | +| 30069 | 2804.98 | +| 30150 | 1061.06 | +| 30162 | 2573.33 | +| 30169 | 1343.44 | +| 30191 | 1183.76 | +| 30194 | 519.41 | +| 30399 | 1012.49 | +| 30499 | 821.42 | +| 30534 | 1298.42 | ++--------+-----------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q16.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q16.snap new file mode 100644 index 0000000000..9ac69e2ecc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q16.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q16" +--- ++-------------+---------------------+------------------+ +| order count | total shipping cost | total net profit | ++-------------+---------------------+------------------+ +| 30 | 118490.87 | 5528.45 | ++-------------+---------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q17.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q17.snap new file mode 100644 index 0000000000..459f425861 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q17.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q17" +--- ++------------------+--------------------------------------------------------------------------------------------------------------------------------------+---------+---------------------------+-------------------------+---------------------------+-------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+ +| i_item_id | i_item_desc | s_state | store_sales_quantitycount | store_sales_quantityave | store_sales_quantitystdev | store_sales_quantitycov | store_returns_quantitycount | store_returns_quantityave | store_returns_quantitystdev | store_returns_quantitycov | catalog_sales_quantitycount | catalog_sales_quantityave | catalog_sales_quantitystdev | catalog_sales_quantitycov | ++------------------+--------------------------------------------------------------------------------------------------------------------------------------+---------+---------------------------+-------------------------+---------------------------+-------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+ +| AAAAAAAAEEODAAAA | Small, redundant christians could hear. Ears cannot get minor, strong studies. Well awful powers may not cook straightforward, consi | TN | 1 | 61.0 | | | 1 | 44.0 | | | 1 | 38.0 | | | ++------------------+--------------------------------------------------------------------------------------------------------------------------------------+---------+---------------------------+-------------------------+---------------------------+-------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+-----------------------------+---------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q18.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q18.snap new file mode 100644 index 0000000000..4dc31a2c2d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q18.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q18" +--- ++------------------+---------------+----------+--------------+-----------+------------+-------------+-----------+--------------+-------------+----------+ +| i_item_id | ca_country | ca_state | ca_county | agg1 | agg2 | agg3 | agg4 | agg5 | agg6 | agg7 | ++------------------+---------------+----------+--------------+-----------+------------+-------------+-----------+--------------+-------------+----------+ +| AAAAAAAAABMAAAAA | United States | CO | Adams County | 59.000000 | 47.570000 | 0.000000 | 16.170000 | -515.660000 | 1969.000000 | 5.000000 | +| AAAAAAAABAKCAAAA | United States | CO | Adams County | 46.000000 | 90.070000 | 0.000000 | 57.640000 | -1257.640000 | 1969.000000 | 5.000000 | +| AAAAAAAACDJAAAAA | United States | CO | Adams County | 93.000000 | 40.380000 | 156.920000 | 15.340000 | -1092.500000 | 1969.000000 | 5.000000 | +| AAAAAAAACFAEAAAA | United States | CO | Adams County | 57.000000 | 117.910000 | 0.000000 | 76.640000 | -82.650000 | 1969.000000 | 5.000000 | +| AAAAAAAAEJHAAAAA | United States | CO | Adams County | 63.000000 | 192.650000 | 0.000000 | 40.450000 | -3343.410000 | 1969.000000 | 5.000000 | +| AAAAAAAAGPHDAAAA | United States | CO | Adams County | 71.000000 | 118.920000 | 2431.600000 | 71.350000 | -3667.000000 | 1969.000000 | 5.000000 | +| AAAAAAAAIBPBAAAA | United States | CO | Adams County | 27.000000 | 26.460000 | 157.800000 | 17.190000 | 58.200000 | 1969.000000 | 5.000000 | +| AAAAAAAAIPFDAAAA | United States | CO | Adams County | 26.000000 | 45.480000 | 0.000000 | 22.740000 | -428.220000 | 1969.000000 | 5.000000 | +| AAAAAAAAKHJDAAAA | United States | CO | Adams County | 63.000000 | 3.100000 | 0.000000 | 0.270000 | -120.960000 | 1969.000000 | 5.000000 | +| AAAAAAAALKICAAAA | United States | CO | Adams County | 37.000000 | 8.560000 | 2.680000 | 0.250000 | -266.490000 | 1969.000000 | 5.000000 | ++------------------+---------------+----------+--------------+-----------+------------+-------------+-----------+--------------+-------------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q19.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q19.snap new file mode 100644 index 0000000000..4105685fe9 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q19.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q19" +--- ++----------+--------------------+---------------+----------------+-----------+ +| brand_id | brand | i_manufact_id | i_manufact | ext_price | ++----------+--------------------+---------------+----------------+-----------+ +| 3002002 | importoexporti #2 | 581 | oughteinganti | 40834.62 | +| 10011002 | amalgamalgamalg #2 | 112 | ableoughtought | 40338.13 | +| 3001002 | amalgexporti #2 | 448 | eingeseese | 39650.24 | +| 9004011 | edu packmaxi #11 | 241 | oughteseable | 37510.87 | +| 10001014 | amalgunivamalg #14 | 207 | ationbarable | 37413.28 | +| 2002001 | importoimporto #1 | 134 | esepriought | 37340.93 | +| 3002001 | importoexporti #1 | 889 | n steingeing | 37084.61 | +| 9005011 | scholarmaxi #11 | 349 | n stesepri | 36336.24 | +| 3001001 | amalgexporti #1 | 358 | eingantipri | 34244.46 | +| 9004003 | edu packmaxi #3 | 191 | oughtn stought | 32848.04 | ++----------+--------------------+---------------+----------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q2.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q2.snap new file mode 100644 index 0000000000..de320004d3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q2.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q2" +--- ++-------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ +| d_week_seq1 | round(y.sun_sales1 / z.sun_sales2,Int64(2)) | round(y.mon_sales1 / z.mon_sales2,Int64(2)) | round(y.tue_sales1 / z.tue_sales2,Int64(2)) | round(y.wed_sales1 / z.wed_sales2,Int64(2)) | round(y.thu_sales1 / z.thu_sales2,Int64(2)) | round(y.fri_sales1 / z.fri_sales2,Int64(2)) | round(y.sat_sales1 / z.sat_sales2,Int64(2)) | ++-------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | +| 5218 | 2.4 | 1.24 | 3.83 | 2.86 | 3.3 | 3.69 | 1.76 | ++-------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q20.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q20.snap new file mode 100644 index 0000000000..fa6c7ff2ba --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q20.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q20" +--- ++------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+---------+-----------------+-------------+--------------+ +| i_item_id | i_item_desc | i_category | i_class | i_current_price | itemrevenue | revenueratio | ++------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+---------+-----------------+-------------+--------------+ +| AAAAAAAAAAGEAAAA | Local, armed trusts might know. Right women might not like. Foreign, dark readers might flow more certain sides. Home old rivers can re | Children | infants | 4.51 | 13327.43 | 1.562243 | +| AAAAAAAAAIBBAAAA | Crews used to visit again; followers take to a scores. Attractive, difficult families absorb days. Foreign, essential empl | Children | infants | 1.52 | 12786.36 | 1.498819 | +| AAAAAAAAAIEEAAAA | Difficult, good children could not use pp.. Historical, equal wings shall take wit | Children | infants | 2.25 | 809.40 | 0.094878 | +| AAAAAAAAAJBDAAAA | Gates create models. Below desirable neighbours will feel yesterday english efforts. Good years help royal problems. Heavy, | Children | infants | 1.29 | 1001.40 | 0.117384 | +| AAAAAAAAAKABAAAA | Technolog | Children | infants | 1.73 | 3079.11 | 0.360933 | +| AAAAAAAAAKBCAAAA | Civil damages hear a bit results. Advertisements shall finance never instances. Large authors used to enjoy as yet special recommend | Children | infants | 8.87 | 24165.32 | 2.832663 | +| AAAAAAAAAKKCAAAA | More important companies get relations. Close new planes may not bring now domestic women. More happy facts swing most following rates; more different phenom | Children | infants | 8.67 | 4779.20 | 0.560218 | +| AAAAAAAAAKNAAAAA | Always complete jews occur less bitter requirements. Female children complain firstly in a requirements. Working-class, good sons catch of course children; casually moral figures emplo | Children | infants | 12.53 | 1033.20 | 0.121111 | +| AAAAAAAAALCEAAAA | S | Children | infants | 4.50 | 2582.74 | 0.302749 | +| AAAAAAAAANKDAAAA | Decades receive. Parts survive straight managers. Clearly professional computers shall gauge requirements; e | Children | infants | 3.08 | 1951.60 | 0.228766 | ++------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+---------+-----------------+-------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q21.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q21.snap new file mode 100644 index 0000000000..d336e0e532 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q21.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q21" +--- ++---------------------+------------------+------------+-----------+ +| w_warehouse_name | i_item_id | inv_before | inv_after | ++---------------------+------------------+------------+-----------+ +| Conventional childr | AAAAAAAAAAHDAAAA | 1861 | 2672 | +| Conventional childr | AAAAAAAAAALAAAAA | 2031 | 2323 | +| Conventional childr | AAAAAAAAACLDAAAA | 2267 | 2625 | +| Conventional childr | AAAAAAAAACPDAAAA | 1794 | 2310 | +| Conventional childr | AAAAAAAAADGBAAAA | 2264 | 2930 | +| Conventional childr | AAAAAAAAAEADAAAA | 1583 | 2049 | +| Conventional childr | AAAAAAAAAFACAAAA | 1591 | 2075 | +| Conventional childr | AAAAAAAAAFDCAAAA | 2432 | 3101 | +| Conventional childr | AAAAAAAAAJCAAAAA | 2406 | 2772 | +| Conventional childr | AAAAAAAAAJKBAAAA | 1216 | 1457 | ++---------------------+------------------+------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q22.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q22.snap new file mode 100644 index 0000000000..a887022ca1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q22.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q22" +--- ++------------------+--------------------+-----------------+-------------+--------------------+ +| i_product_name | i_brand | i_class | i_category | qoh | ++------------------+--------------------+-----------------+-------------+--------------------+ +| oughtesebarought | edu packimporto #2 | sports-apparel | Men | 262.0 | +| oughtesebarought | edu packimporto #2 | sports-apparel | | 262.0 | +| oughtesebarought | edu packimporto #2 | | | 262.0 | +| oughtesebarought | | | | 262.0 | +| pricallyantiese | amalgunivamalg #8 | cameras | Electronics | 269.0 | +| pricallyantiese | amalgunivamalg #8 | cameras | | 269.0 | +| pricallyantiese | amalgunivamalg #8 | | | 269.0 | +| pricallyantiese | | | | 269.0 | +| prin stbarpri | edu packexporti #2 | school-uniforms | Children | 297.55555555555554 | +| prin stbarpri | edu packexporti #2 | school-uniforms | | 297.55555555555554 | ++------------------+--------------------+-----------------+-------------+--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q25.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q25.snap new file mode 100644 index 0000000000..e17b20f102 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q25.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q25" +--- ++------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+--------------+--------------------+--------------------+----------------------+ +| i_item_id | i_item_desc | s_store_id | s_store_name | store_sales_profit | store_returns_loss | catalog_sales_profit | ++------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+--------------+--------------------+--------------------+----------------------+ +| AAAAAAAAMMABAAAA | Dead, social pupils will like brightly; languages meet usually results. Sure, strong causes shall offset nervously good languages. Poor, hungry governments would not start still terms. Arrangem | AAAAAAAAEAAAAAAA | ese | -145.81 | 72.53 | 374.34 | ++------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+--------------+--------------------+--------------------+----------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q26.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q26.snap new file mode 100644 index 0000000000..5610b67b45 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q26.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q26" +--- ++------------------+------+------------+-------------+-----------+ +| i_item_id | agg1 | agg2 | agg3 | agg4 | ++------------------+------+------------+-------------+-----------+ +| AAAAAAAAAAACAAAA | 52.0 | 91.580000 | 0.000000 | 59.446666 | +| AAAAAAAAAABAAAAA | 81.5 | 185.820000 | 450.980000 | 18.415000 | +| AAAAAAAAAABBAAAA | 63.0 | 87.085000 | 3011.665000 | 71.080000 | +| AAAAAAAAAABEAAAA | 68.0 | 56.180000 | 0.000000 | 30.890000 | +| AAAAAAAAAACAAAAA | 45.0 | 75.080000 | 2654.350000 | 60.810000 | +| AAAAAAAAAACDAAAA | 67.0 | 41.920000 | 0.000000 | 41.920000 | +| AAAAAAAAAADBAAAA | 47.5 | 110.755000 | 377.310000 | 79.025000 | +| AAAAAAAAAADEAAAA | 41.0 | 58.150000 | 80.090000 | 8.140000 | +| AAAAAAAAAAEAAAAA | 1.0 | 42.880000 | 0.000000 | 21.010000 | +| AAAAAAAAAAEBAAAA | 65.0 | 70.060000 | 0.000000 | 51.140000 | ++------------------+------+------------+-------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q27.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q27.snap new file mode 100644 index 0000000000..e768e5b90b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q27.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q27" +--- ++------------------+---------+---------+------+-----------+------------+-----------+ +| i_item_id | s_state | g_state | agg1 | agg2 | agg3 | agg4 | ++------------------+---------+---------+------+-----------+------------+-----------+ +| AAAAAAAAAABDAAAA | TN | 0 | 96.0 | 14.100000 | 0.000000 | 0.140000 | +| AAAAAAAAAABDAAAA | | 1 | 96.0 | 14.100000 | 0.000000 | 0.140000 | +| AAAAAAAAAACAAAAA | TN | 0 | 12.0 | 80.200000 | 0.000000 | 28.870000 | +| AAAAAAAAAACAAAAA | | 1 | 12.0 | 80.200000 | 0.000000 | 28.870000 | +| AAAAAAAAAADCAAAA | TN | 0 | 53.0 | 57.150000 | 0.000000 | 50.290000 | +| AAAAAAAAAADCAAAA | | 1 | 53.0 | 57.150000 | 0.000000 | 50.290000 | +| AAAAAAAAAAEAAAAA | TN | 0 | 45.5 | 47.005000 | 0.000000 | 37.575000 | +| AAAAAAAAAAEAAAAA | | 1 | 45.5 | 47.005000 | 0.000000 | 37.575000 | +| AAAAAAAAAAEDAAAA | TN | 0 | 49.5 | 69.080000 | 732.820000 | 43.045000 | +| AAAAAAAAAAEDAAAA | | 1 | 49.5 | 69.080000 | 732.820000 | 43.045000 | ++------------------+---------+---------+------+-----------+------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q28.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q28.snap new file mode 100644 index 0000000000..cad9d7a560 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q28.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q28" +--- ++-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+------------+--------+---------+ +| B1_LP | B1_CNT | B1_CNTD | B2_LP | B2_CNT | B2_CNTD | B3_LP | B3_CNT | B3_CNTD | B4_LP | B4_CNT | B4_CNTD | B5_LP | B5_CNT | B5_CNTD | B6_LP | B6_CNT | B6_CNTD | ++-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+------------+--------+---------+ +| 56.475495 | 36049 | 7003 | 90.924245 | 31399 | 8235 | 61.574065 | 29174 | 6522 | 69.692258 | 36200 | 8320 | 89.286962 | 32212 | 7930 | 106.974797 | 28626 | 9058 | ++-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+-----------+--------+---------+------------+--------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q29.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q29.snap new file mode 100644 index 0000000000..34645ccce4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q29.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q29" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q3.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q3.snap new file mode 100644 index 0000000000..aa357e59c8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q3.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q3" +--- ++--------+----------+--------------------+-----------+ +| d_year | brand_id | brand | sum_agg | ++--------+----------+--------------------+-----------+ +| 1998 | 5004001 | edu packscholar #1 | -2450.80 | +| 1998 | 7003004 | exportibrand #4 | -4183.98 | +| 1998 | 10016001 | corpamalgamalg #1 | -4470.32 | +| 1998 | 3001002 | amalgexporti #2 | -6075.72 | +| 1998 | 3003001 | exportiexporti #1 | -6574.20 | +| 1998 | 1004002 | edu packamalg #2 | -10940.43 | +| 1998 | 3004001 | edu packexporti #1 | -12805.12 | +| 1998 | 8001003 | amalgnameless #3 | -13992.36 | +| 1999 | 5004001 | edu packscholar #1 | -2641.05 | +| 1999 | 10016001 | corpamalgamalg #1 | -2990.37 | ++--------+----------+--------------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q30.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q30.snap new file mode 100644 index 0000000000..39fb468f27 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q30.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q30" +--- ++------------------+--------------+--------------+-------------+-----------------------+-------------+---------------+--------------+---------------------+---------+--------------------------------+-----------------------+------------------+ +| c_customer_id | c_salutation | c_first_name | c_last_name | c_preferred_cust_flag | c_birth_day | c_birth_month | c_birth_year | c_birth_country | c_login | c_email_address | c_last_review_date_sk | ctr_total_return | ++------------------+--------------+--------------+-------------+-----------------------+-------------+---------------+--------------+---------------------+---------+--------------------------------+-----------------------+------------------+ +| AAAAAAAAACJMAAAA | Dr. | Amanda | Grimes | Y | 18 | 6 | 1955 | LIBERIA | | Amanda.Grimes@6bDT.com | 2452605 | 2365.00 | +| AAAAAAAAACOPAAAA | Mrs. | Casandra | Ford | Y | 8 | 3 | 1956 | MOROCCO | | Casandra.Ford@RV8CTX2T86VY.edu | 2452625 | 7331.93 | +| AAAAAAAAAKACBAAA | Dr. | Julie | Howe | Y | 20 | 10 | 1932 | ANGUILLA | | Julie.Howe@Iv.edu | 2452330 | 3703.64 | +| AAAAAAAAALFFBAAA | Ms. | Katrina | Oliver | Y | 29 | 7 | 1936 | NEW ZEALAND | | Katrina.Oliver@r18C6nUAq.com | 2452395 | 3098.55 | +| AAAAAAAAAMGBAAAA | Ms. | Joyce | Harris | N | 13 | 1 | 1946 | GUINEA | | Joyce.Harris@gs.com | 2452547 | 4526.55 | +| AAAAAAAAAMNGBAAA | Dr. | Anthony | Matson | N | 23 | 12 | 1979 | SOLOMON ISLANDS | | Anthony.Matson@IYE9jGP3.com | 2452470 | 2193.84 | +| AAAAAAAABAIBBAAA | Mrs. | Anna | Yanez | N | 10 | 9 | 1951 | ANTIGUA AND BARBUDA | | Anna.Yanez@lxMkGQ78.edu | 2452424 | 1763.52 | +| AAAAAAAABAMLAAAA | Mrs. | Susan | Roberts | Y | 22 | 5 | 1985 | LIECHTENSTEIN | | Susan.Roberts@UNvxXkFc.edu | 2452529 | 2909.76 | +| AAAAAAAABBGJAAAA | Dr. | David | Burgess | N | 24 | 7 | 1932 | BRUNEI DARUSSALAM | | David.Burgess@jN.edu | 2452497 | 5884.92 | +| AAAAAAAABBIEBAAA | Miss | Tabatha | Smith | Y | 11 | 1 | 1930 | PITCAIRN | | Tabatha.Smith@C89rMdanZ.edu | 2452296 | 6715.08 | ++------------------+--------------+--------------+-------------+-----------------------+-------------+---------------+--------------+---------------------+---------+--------------------------------+-----------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q31.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q31.snap new file mode 100644 index 0000000000..785ad9afe5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q31.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q31" +--- ++------------------+--------+--------------------+----------------------+--------------------+----------------------+ +| ca_county | d_year | web_q1_q2_increase | store_q1_q2_increase | web_q2_q3_increase | store_q2_q3_increase | ++------------------+--------+--------------------+----------------------+--------------------+----------------------+ +| Allen County | 1999 | 2.297824 | 2.011862 | 1.463565 | 0.784115 | +| Austin County | 1999 | 0.584071 | 0.367871 | 2.249642 | 1.723069 | +| Barnwell County | 1999 | 4.585032 | 1.135011 | 0.675402 | 0.441830 | +| Bennett County | 1999 | 1.841019 | 0.569755 | 3.832678 | 3.540936 | +| Bristol County | 1999 | 1.245811 | 0.898968 | 0.909130 | 0.537356 | +| Caldwell County | 1999 | 1.298005 | 1.290953 | 13.198440 | 1.371537 | +| Camden County | 1999 | 1.062649 | 0.766544 | 2.771309 | 1.859508 | +| Cass County | 1999 | 2.116449 | 1.568685 | 3.481910 | 1.433987 | +| Chickasaw County | 1999 | 1.053849 | 0.543011 | 3.146861 | 0.870939 | +| Claiborne County | 1999 | 2.209218 | 1.014876 | 1.793255 | 0.928353 | ++------------------+--------+--------------------+----------------------+--------------------+----------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q32.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q32.snap new file mode 100644 index 0000000000..1a598842ef --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q32.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q32" +--- ++------------------------+ +| excess discount amount | ++------------------------+ +| 122275.56 | ++------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q33.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q33.snap new file mode 100644 index 0000000000..2b18777b1c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q33.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q33" +--- ++---------------+-------------+ +| i_manufact_id | total_sales | ++---------------+-------------+ +| 818 | 4.08 | +| 993 | 40.00 | +| 990 | 97.65 | +| 710 | 317.32 | +| 920 | 694.31 | +| 780 | 794.63 | +| 936 | 815.27 | +| 812 | 912.00 | +| 748 | 995.14 | +| 582 | 1243.55 | ++---------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q34.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q34.snap new file mode 100644 index 0000000000..34f14d7c62 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q34.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q34" +--- ++-------------+--------------+--------------+-----------------------+------------------+-----+ +| c_last_name | c_first_name | c_salutation | c_preferred_cust_flag | ss_ticket_number | cnt | ++-------------+--------------+--------------+-----------------------+------------------+-----+ +| Adams | Willie | Sir | Y | 88285 | 16 | +| Akers | Susan | Miss | N | 239968 | 15 | +| Alston | Jesus | Sir | Y | 52608 | 15 | +| Anderson | Martha | Mrs. | Y | 205757 | 16 | +| Anderson | Norma | Miss | Y | 132983 | 15 | +| Andrews | Cindy | Miss | Y | 132595 | 15 | +| Andrews | Robert | Sir | Y | 30467 | 16 | +| Appleton | Ivan | Dr. | Y | 74586 | 16 | +| Archibald | Cindy | Miss | Y | 87178 | 16 | +| Baird | Jovita | Miss | N | 27451 | 16 | ++-------------+--------------+--------------+-----------------------+------------------+-----+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q35.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q35.snap new file mode 100644 index 0000000000..02de1306dd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q35.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q35" +--- ++----------+-----------+-------------------+--------------+------+-----------------------------------------+--------------------+--------------------+-----------------------+------+--------------------------------------------------+-----------------------------+-----------------------------+----------------------+------+-------------------------------------------------+----------------------------+----------------------------+ +| ca_state | cd_gender | cd_marital_status | cd_dep_count | cnt1 | max(customer_demographics.cd_dep_count) | stddev_dep_count_1 | stddev_dep_count_2 | cd_dep_employed_count | cnt2 | max(customer_demographics.cd_dep_employed_count) | stddev_dep_employed_count_1 | stddev_dep_employed_count_2 | cd_dep_college_count | cnt3 | max(customer_demographics.cd_dep_college_count) | stddev_dep_college_count_1 | stddev_dep_college_count_2 | ++----------+-----------+-------------------+--------------+------+-----------------------------------------+--------------------+--------------------+-----------------------+------+--------------------------------------------------+-----------------------------+-----------------------------+----------------------+------+-------------------------------------------------+----------------------------+----------------------------+ +| AK | F | D | 4 | 1 | 4 | | | 4 | 1 | 4 | | | 5 | 1 | 5 | | | +| AK | F | D | 4 | 1 | 4 | | | 6 | 1 | 6 | | | 4 | 1 | 4 | | | +| AK | F | M | 0 | 1 | 0 | | | 4 | 1 | 4 | | | 3 | 1 | 3 | | | +| AK | F | M | 1 | 1 | 1 | | | 5 | 1 | 5 | | | 0 | 1 | 0 | | | +| AK | F | S | 0 | 1 | 0 | | | 1 | 1 | 1 | | | 3 | 1 | 3 | | | +| AK | F | S | 2 | 1 | 2 | | | 5 | 1 | 5 | | | 1 | 1 | 1 | | | +| AK | F | S | 3 | 1 | 3 | | | 3 | 1 | 3 | | | 2 | 1 | 2 | | | +| AK | F | U | 2 | 1 | 2 | | | 3 | 1 | 3 | | | 4 | 1 | 4 | | | +| AK | F | U | 3 | 1 | 3 | | | 6 | 1 | 6 | | | 3 | 1 | 3 | | | +| AK | F | W | 1 | 1 | 1 | | | 4 | 1 | 4 | | | 1 | 1 | 1 | | | ++----------+-----------+-------------------+--------------+------+-----------------------------------------+--------------------+--------------------+-----------------------+------+--------------------------------------------------+-----------------------------+-----------------------------+----------------------+------+-------------------------------------------------+----------------------------+----------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q36.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q36.snap new file mode 100644 index 0000000000..705c95a4cf --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q36.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q36" +--- ++--------------+-------------+---------+--------------+--------------------+ +| gross_margin | i_category | i_class | lochierarchy | rank_within_parent | ++--------------+-------------+---------+--------------+--------------------+ +| -0.433165 | | | 2 | 1 | +| -0.442282 | Jewelry | | 1 | 1 | +| -0.440772 | Men | | 1 | 2 | +| -0.437870 | Books | | 1 | 3 | +| -0.435732 | Music | | 1 | 4 | +| -0.432691 | Shoes | | 1 | 5 | +| -0.432316 | Sports | | 1 | 6 | +| -0.431523 | Children | | 1 | 7 | +| -0.430921 | Women | | 1 | 8 | +| -0.426266 | Electronics | | 1 | 9 | ++--------------+-------------+---------+--------------+--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q37.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q37.snap new file mode 100644 index 0000000000..a554c2909c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q37.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q37" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q38.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q38.snap new file mode 100644 index 0000000000..110ff12b82 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q38.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q38" +--- ++----------+ +| count(*) | ++----------+ +| 111 | ++----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q4.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q4.snap new file mode 100644 index 0000000000..ccdee7cf55 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q4.snap @@ -0,0 +1,14 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q4" +--- ++------------------+---------------------+--------------------+--------------------------------------+ +| customer_id | customer_first_name | customer_last_name | customer_email_address | ++------------------+---------------------+--------------------+--------------------------------------+ +| AAAAAAAADIIOAAAA | David | Carroll | David.Carroll@fm.edu | +| AAAAAAAAIJCIBAAA | Thomas | Oneal | Thomas.Oneal@YhHzOk6o3RiKc1AREv.edu | +| AAAAAAAAKJBLAAAA | Kerry | Davis | Kerry.Davis@i.com | +| AAAAAAAANJAMAAAA | Thaddeus | Griffin | | +| AAAAAAAANJOLAAAA | Debra | Underwood | Debra.Underwood@f3193uX.org | +| AAAAAAAAPFCLAAAA | Felicia | Neville | Felicia.Neville@ZQCM0Ctmt60s9MDa.edu | ++------------------+---------------------+--------------------+--------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q40.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q40.snap new file mode 100644 index 0000000000..4259edc236 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q40.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q40" +--- ++---------+------------------+--------------+-------------+ +| w_state | i_item_id | sales_before | sales_after | ++---------+------------------+--------------+-------------+ +| TN | AAAAAAAAAAABAAAA | 36.12 | 0.00 | +| TN | AAAAAAAAAAKBAAAA | 271.23 | 134.31 | +| TN | AAAAAAAAABBAAAAA | -400.48 | 0.00 | +| TN | AAAAAAAAABECAAAA | 34.97 | 154.15 | +| TN | AAAAAAAAACIBAAAA | 0.00 | 128.77 | +| TN | AAAAAAAAADBEAAAA | 53.44 | 98.51 | +| TN | AAAAAAAAADKAAAAA | 83.97 | 0.00 | +| TN | AAAAAAAAADLCAAAA | 0.00 | 149.82 | +| TN | AAAAAAAAAEBDAAAA | 37.78 | 121.04 | +| TN | AAAAAAAAAEHAAAAA | 0.00 | 83.31 | ++---------+------------------+--------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q41.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q41.snap new file mode 100644 index 0000000000..75385a7cd2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q41.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q41" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q42.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q42.snap new file mode 100644 index 0000000000..f631ab8527 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q42.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q42" +--- ++--------+---------------+-------------+-------------------------------------+ +| d_year | i_category_id | i_category | sum(store_sales.ss_ext_sales_price) | ++--------+---------------+-------------+-------------------------------------+ +| 1998 | 1 | Women | 408449.57 | +| 1998 | 5 | Music | 388897.38 | +| 1998 | 6 | Jewelry | 371882.78 | +| 1998 | 2 | Men | 355093.48 | +| 1998 | 7 | Home | 318383.84 | +| 1998 | 3 | Children | 302172.98 | +| 1998 | 10 | Electronics | 261338.42 | +| 1998 | 8 | Sports | 245262.43 | +| 1998 | 9 | Books | 225900.06 | +| 1998 | 4 | Shoes | 217879.90 | ++--------+---------------+-------------+-------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q43.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q43.snap new file mode 100644 index 0000000000..443361b3c5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q43.snap @@ -0,0 +1,14 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q43" +--- ++--------------+------------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ +| s_store_name | s_store_id | sun_sales | mon_sales | tue_sales | wed_sales | thu_sales | fri_sales | sat_sales | ++--------------+------------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ +| able | AAAAAAAACAAAAAAA | 515110.76 | 464120.06 | 500664.51 | 448205.41 | 478045.76 | 461757.71 | 503931.77 | +| ation | AAAAAAAAHAAAAAAA | 502011.90 | 481011.39 | 447377.22 | 486012.34 | 505015.37 | 469140.25 | 508623.72 | +| bar | AAAAAAAAKAAAAAAA | 497068.47 | 468861.30 | 479823.43 | 476073.24 | 472854.26 | 485000.19 | 498871.73 | +| eing | AAAAAAAAIAAAAAAA | 496572.01 | 467279.73 | 481388.19 | 450509.39 | 490318.17 | 473732.21 | 482544.35 | +| ese | AAAAAAAAEAAAAAAA | 491878.78 | 499206.55 | 454298.99 | 469053.78 | 475448.17 | 479807.40 | 500623.05 | +| ought | AAAAAAAABAAAAAAA | 506429.61 | 466670.31 | 465561.55 | 483011.61 | 490414.38 | 471727.31 | 500735.85 | ++--------------+------------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q44.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q44.snap new file mode 100644 index 0000000000..bc1f5ce6dc --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q44.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q44" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q45.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q45.snap new file mode 100644 index 0000000000..02871c1572 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q45.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q45" +--- ++--------+-------------+-------------------------------+ +| ca_zip | ca_city | sum(web_sales.ws_sales_price) | ++--------+-------------+-------------------------------+ +| 08283 | Green Acres | 169.15 | +| 08438 | Oak Hill | 14.33 | +| 20191 | Belmont | 12.26 | +| 29303 | Springfield | 11.60 | +| 34975 | Kingston | 111.23 | +| 41675 | Waterloo | 85.96 | +| 53788 | Barnes | 31.26 | +| 66192 | Fairfield | 18.09 | +| 70069 | Edgewood | 81.39 | +| 70534 | Crossroads | 0.00 | ++--------+-------------+-------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q46.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q46.snap new file mode 100644 index 0000000000..a10dd8079b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q46.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q46" +--- ++-------------+--------------+--------------+-------------+------------------+---------+-----------+ +| c_last_name | c_first_name | ca_city | bought_city | ss_ticket_number | amt | profit | ++-------------+--------------+--------------+-------------+------------------+---------+-----------+ +| Aaron | Charles | Jamestown | Red Hill | 183217 | 400.46 | -1906.15 | +| Aaron | George | Forest Hills | Woodville | 6922 | 1100.47 | -6529.57 | +| Abbott | Frederick | Green Acres | Oakland | 7247 | 7023.24 | -10956.48 | +| Abbott | Genevieve | Lebanon | Union Hill | 222904 | 277.04 | -5039.97 | +| Abbott | Kathlyn | Highland | Providence | 102224 | 2617.32 | -11370.51 | +| Abel | Etta | Wildwood | Newport | 180836 | 1122.81 | -1393.48 | +| Abernathy | Helen | Forest Hills | Fairview | 235211 | 5081.59 | -5300.55 | +| Abner | Lane | Liberty | Greenville | 9171 | 2302.49 | -14539.45 | +| Abraham | Carolyn | Shiloh | Ashland | 132084 | 443.13 | -5091.86 | +| Abraham | Michael | Kingston | Clifton | 14263 | 1234.83 | -3781.53 | ++-------------+--------------+--------------+-------------+------------------+---------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q47.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q47.snap new file mode 100644 index 0000000000..106a8fb7ef --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q47.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q47" +--- ++------------+--------------------+--------------+----------------+--------+-------------------+-----------+---------+---------+ +| i_category | i_brand | s_store_name | s_company_name | d_year | avg_monthly_sales | sum_sales | psum | nsum | ++------------+--------------------+--------------+----------------+--------+-------------------+-----------+---------+---------+ +| Shoes | importoedu pack #2 | able | Unknown | 2001 | 7627.086666 | 2936.33 | 5480.07 | 4058.81 | +| Men | importoimporto #2 | ese | Unknown | 2001 | 7497.674166 | 2924.52 | 4734.38 | 3797.43 | +| Men | importoimporto #2 | ation | Unknown | 2001 | 7784.624166 | 3216.53 | 4992.67 | 5380.59 | +| Children | exportiexporti #2 | eing | Unknown | 2001 | 6837.600000 | 2360.39 | 3388.26 | 4503.41 | +| Music | importoscholar #2 | ation | Unknown | 2001 | 8033.681666 | 3571.12 | 4227.43 | 4608.46 | +| Shoes | importoedu pack #2 | ought | Unknown | 2001 | 7435.618333 | 2987.39 | 3797.90 | 3572.56 | +| Music | importoscholar #2 | ought | Unknown | 2001 | 7797.459166 | 3352.52 | 5289.57 | 4423.50 | +| Music | importoscholar #2 | able | Unknown | 2001 | 7520.386666 | 3184.79 | 4930.06 | 4550.93 | +| Shoes | importoedu pack #2 | ese | Unknown | 2001 | 8061.617500 | 3749.84 | 4953.00 | 5158.90 | +| Men | importoimporto #2 | bar | Unknown | 2001 | 7508.208333 | 3202.76 | 4061.76 | 4226.74 | ++------------+--------------------+--------------+----------------+--------+-------------------+-----------+---------+---------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q48.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q48.snap new file mode 100644 index 0000000000..4136eafedd --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q48.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q48" +--- ++------------------------------+ +| sum(store_sales.ss_quantity) | ++------------------------------+ +| 28660 | ++------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q49.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q49.snap new file mode 100644 index 0000000000..0e52e60de2 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q49.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q49" +--- ++---------+-------+--------------+-------------+---------------+ +| channel | item | return_ratio | return_rank | currency_rank | ++---------+-------+--------------+-------------+---------------+ +| catalog | 2035 | 0.51546391 | 1 | 1 | +| catalog | 6770 | 0.58585858 | 2 | 2 | +| catalog | 3821 | 0.59595959 | 3 | 3 | +| catalog | 17273 | 0.63541666 | 4 | 4 | +| catalog | 16699 | 0.66666666 | 5 | 5 | +| catalog | 17975 | 0.67058823 | 6 | 6 | +| catalog | 13487 | 0.68235294 | 7 | 7 | +| catalog | 2725 | 0.68539325 | 8 | 8 | +| catalog | 11993 | 0.69411764 | 9 | 9 | +| catalog | 12739 | 0.70103092 | 10 | 10 | ++---------+-------+--------------+-------------+---------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q5.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q5.snap new file mode 100644 index 0000000000..753c97d33e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q5.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q5" +--- ++-----------------+------------------------------+-----------+---------+-----------+ +| channel | id | sales | returns | profit | ++-----------------+------------------------------+-----------+---------+-----------+ +| catalog channel | catalog_pageAAAAAAAAAAHBAAAA | 0.00 | 2573.86 | -2314.21 | +| catalog channel | catalog_pageAAAAAAAAAAIBAAAA | 79271.26 | 0.00 | -15373.96 | +| catalog channel | catalog_pageAAAAAAAAAAKBAAAA | 84480.65 | 0.00 | 6246.81 | +| catalog channel | catalog_pageAAAAAAAAABHBAAAA | 0.00 | 778.91 | -737.66 | +| catalog channel | catalog_pageAAAAAAAAABKBAAAA | 101276.24 | 0.00 | 10193.83 | +| catalog channel | catalog_pageAAAAAAAAACEBAAAA | 0.00 | 147.18 | -161.10 | +| catalog channel | catalog_pageAAAAAAAAACHBAAAA | 0.00 | 5603.78 | -3477.14 | +| catalog channel | catalog_pageAAAAAAAAACKBAAAA | 39547.67 | 0.00 | -13233.16 | +| catalog channel | catalog_pageAAAAAAAAADHBAAAA | 0.00 | 1291.83 | -1529.96 | +| catalog channel | catalog_pageAAAAAAAAADIBAAAA | 0.00 | 371.25 | -135.98 | ++-----------------+------------------------------+-----------+---------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q50.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q50.snap new file mode 100644 index 0000000000..8efb01c6f0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q50.snap @@ -0,0 +1,14 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q50" +--- ++--------------+--------------+-----------------+---------------+---------------+----------------+----------+-------------------+---------+-------+---------+------------+------------+-------------+-----------+ +| s_store_name | s_company_id | s_street_number | s_street_name | s_street_type | s_suite_number | s_city | s_county | s_state | s_zip | 30 days | 31-60 days | 61-90 days | 91-120 days | >120 days | ++--------------+--------------+-----------------+---------------+---------------+----------------+----------+-------------------+---------+-------+---------+------------+------------+-------------+-----------+ +| able | 1 | 255 | Sycamore | Dr. | Suite 410 | Midway | Williamson County | TN | 31904 | 68 | 62 | 56 | 59 | 118 | +| ation | 1 | 811 | Lee | Circle | Suite T | Midway | Williamson County | TN | 31904 | 73 | 59 | 67 | 59 | 109 | +| bar | 1 | 175 | 4th | Court | Suite C | Midway | Williamson County | TN | 31904 | 62 | 55 | 58 | 43 | 91 | +| eing | 1 | 226 | 12th | Lane | Suite D | Fairview | Williamson County | TN | 35709 | 64 | 57 | 38 | 51 | 101 | +| ese | 1 | 27 | Lake | Ln | Suite 260 | Midway | Williamson County | TN | 31904 | 71 | 51 | 53 | 54 | 106 | +| ought | 1 | 767 | Spring | Wy | Suite 250 | Midway | Williamson County | TN | 31904 | 76 | 48 | 66 | 54 | 110 | ++--------------+--------------+-----------------+---------------+---------------+----------------+----------+-------------------+---------+-------+---------+------------+------------+-------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q51.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q51.snap new file mode 100644 index 0000000000..cd14f3141d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q51.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q51" +--- ++---------+------------+-----------+-------------+----------------+------------------+ +| item_sk | d_date | web_sales | store_sales | web_cumulative | store_cumulative | ++---------+------------+-----------+-------------+----------------+------------------+ +| 1 | 2001-04-30 | 121.34 | | 121.34 | 22.38 | +| 1 | 2001-05-15 | | 93.47 | 121.34 | 93.47 | +| 1 | 2001-06-17 | 239.63 | | 239.63 | 93.47 | +| 1 | 2001-06-24 | | 94.80 | 239.63 | 94.80 | +| 1 | 2001-07-09 | | 148.10 | 239.63 | 148.10 | +| 1 | 2001-07-16 | | 191.66 | 239.63 | 191.66 | +| 1 | 2001-08-13 | 349.53 | | 349.53 | 346.98 | +| 1 | 2001-08-22 | 378.45 | 349.12 | 378.45 | 349.12 | +| 5 | 2001-07-13 | 362.50 | | 362.50 | 324.71 | +| 5 | 2001-07-15 | | 327.23 | 362.50 | 327.23 | ++---------+------------+-----------+-------------+----------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q52.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q52.snap new file mode 100644 index 0000000000..9fc93f750b --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q52.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q52" +--- ++--------+----------+--------------------+-----------+ +| d_year | brand_id | brand | ext_price | ++--------+----------+--------------------+-----------+ +| 2000 | 2001002 | amalgimporto #2 | 138459.58 | +| 2000 | 4001002 | amalgedu pack #2 | 75172.77 | +| 2000 | 2002001 | importoimporto #1 | 73490.38 | +| 2000 | 4003001 | exportiedu pack #1 | 61509.01 | +| 2000 | 3004002 | edu packexporti #2 | 61120.99 | +| 2000 | 1003002 | exportiamalg #2 | 56170.77 | +| 2000 | 5004002 | edu packscholar #2 | 55076.09 | +| 2000 | 3002002 | importoexporti #2 | 52911.02 | +| 2000 | 1001002 | amalgamalg #2 | 51877.12 | +| 2000 | 1003001 | exportiamalg #1 | 48861.72 | ++--------+----------+--------------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q53.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q53.snap new file mode 100644 index 0000000000..1b6e6cde4c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q53.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q53" +--- ++---------------+-----------+---------------------+ +| i_manufact_id | sum_sales | avg_quarterly_sales | ++---------------+-----------+---------------------+ +| 115 | 3.33 | 176.990000 | +| 115 | 22.13 | 176.990000 | +| 115 | 505.51 | 176.990000 | +| 37 | 3.03 | 224.796666 | +| 37 | 11.64 | 224.796666 | +| 37 | 659.72 | 224.796666 | +| 929 | 1.85 | 226.820000 | +| 929 | 451.79 | 226.820000 | +| 945 | 107.35 | 258.150000 | +| 945 | 408.95 | 258.150000 | ++---------------+-----------+---------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q54.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q54.snap new file mode 100644 index 0000000000..ff4192ac69 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q54.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q54" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q55.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q55.snap new file mode 100644 index 0000000000..f5a549b40e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q55.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q55" +--- ++----------+--------------------+-----------+ +| brand_id | brand | ext_price | ++----------+--------------------+-----------+ +| 5004001 | edu packscholar #1 | 141597.49 | +| 3001001 | amalgexporti #1 | 117294.38 | +| 2002001 | importoimporto #1 | 113395.52 | +| 5002001 | importoscholar #1 | 87346.27 | +| 4003001 | exportiedu pack #1 | 87079.04 | +| 4001001 | amalgedu pack #1 | 73768.57 | +| 1003002 | exportiamalg #2 | 70688.56 | +| 1002001 | importoamalg #1 | 69055.40 | +| 3002002 | importoexporti #2 | 66031.41 | +| 1004002 | edu packamalg #2 | 63504.03 | ++----------+--------------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q56.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q56.snap new file mode 100644 index 0000000000..9e61487258 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q56.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q56" +--- ++------------------+-------------+ +| i_item_id | total_sales | ++------------------+-------------+ +| AAAAAAAAGHDAAAAA | 0.00 | +| AAAAAAAAIDDAAAAA | 2.04 | +| AAAAAAAAGEJAAAAA | 13.70 | +| AAAAAAAAEOPCAAAA | 15.24 | +| AAAAAAAACOKDAAAA | 25.41 | +| AAAAAAAAIKOAAAAA | 27.20 | +| AAAAAAAAKANAAAAA | 38.28 | +| AAAAAAAAGPICAAAA | 41.14 | +| AAAAAAAAALEEAAAA | 57.89 | +| AAAAAAAAKNDDAAAA | 62.88 | ++------------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q57.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q57.snap new file mode 100644 index 0000000000..04f07a5410 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q57.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q57" +--- ++---------------+--------+-------+-------------------+-----------+---------+----------+ +| cc_name | d_year | d_moy | avg_monthly_sales | sum_sales | psum | nsum | ++---------------+--------+-------+-------------------+-----------+---------+----------+ +| Mid Atlantic | 2000 | 3 | 7895.495000 | 3276.52 | 3934.81 | 4024.61 | +| North Midwest | 2000 | 3 | 6176.385000 | 1791.37 | 3105.63 | 3188.23 | +| Mid Atlantic | 2000 | 6 | 7785.660000 | 3440.55 | 4683.25 | 4499.24 | +| Mid Atlantic | 2000 | 4 | 7418.351666 | 3112.94 | 4631.26 | 4244.00 | +| North Midwest | 2000 | 7 | 7442.359166 | 3247.00 | 3649.91 | 9513.42 | +| North Midwest | 2000 | 7 | 6584.354166 | 2398.51 | 4637.25 | 9276.12 | +| Mid Atlantic | 2000 | 1 | 7418.351666 | 3270.63 | 8220.94 | 4453.90 | +| Mid Atlantic | 2000 | 2 | 6223.500833 | 2101.20 | 2841.89 | 4361.48 | +| North Midwest | 2000 | 2 | 7380.425000 | 3278.42 | 3851.67 | 5933.20 | +| NY Metro | 2000 | 7 | 7214.640000 | 3116.25 | 4220.97 | 11591.46 | ++---------------+--------+-------+-------------------+-----------+---------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q58.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q58.snap new file mode 100644 index 0000000000..08c3b59deb --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q58.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q58" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q59.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q59.snap new file mode 100644 index 0000000000..9157b9221d --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q59.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q59" +--- ++---------------+------------------+-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ +| s_store_name1 | s_store_id1 | d_week_seq1 | y.sun_sales1 / x.sun_sales2 | y.mon_sales1 / x.mon_sales2 | y.tue_sales1 / x.tue_sales2 | y.wed_sales1 / x.wed_sales2 | y.thu_sales1 / x.thu_sales2 | y.fri_sales1 / x.fri_sales2 | y.sat_sales1 / x.sat_sales2 | ++---------------+------------------+-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ +| able | AAAAAAAACAAAAAAA | 5244 | 1.133535 | 0.713526 | 0.921273 | 0.600415 | 0.641560 | 1.022973 | 2.117672 | +| able | AAAAAAAACAAAAAAA | 5244 | 1.133535 | 0.713526 | 0.921273 | 0.600415 | 0.641560 | 1.022973 | 2.117672 | +| able | AAAAAAAACAAAAAAA | 5244 | 1.133535 | 0.713526 | 0.921273 | 0.600415 | 0.641560 | 1.022973 | 2.117672 | +| able | AAAAAAAACAAAAAAA | 5244 | 1.133535 | 0.713526 | 0.921273 | 0.600415 | 0.641560 | 1.022973 | 2.117672 | +| able | AAAAAAAACAAAAAAA | 5244 | 1.133535 | 0.713526 | 0.921273 | 0.600415 | 0.641560 | 1.022973 | 2.117672 | +| able | AAAAAAAACAAAAAAA | 5244 | 1.133535 | 0.713526 | 0.921273 | 0.600415 | 0.641560 | 1.022973 | 2.117672 | +| able | AAAAAAAACAAAAAAA | 5245 | 1.359250 | 1.062328 | 0.991195 | 0.909982 | 0.897605 | 1.431441 | 0.725032 | +| able | AAAAAAAACAAAAAAA | 5245 | 1.359250 | 1.062328 | 0.991195 | 0.909982 | 0.897605 | 1.431441 | 0.725032 | +| able | AAAAAAAACAAAAAAA | 5245 | 1.359250 | 1.062328 | 0.991195 | 0.909982 | 0.897605 | 1.431441 | 0.725032 | +| able | AAAAAAAACAAAAAAA | 5245 | 1.359250 | 1.062328 | 0.991195 | 0.909982 | 0.897605 | 1.431441 | 0.725032 | ++---------------+------------------+-------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q6.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q6.snap new file mode 100644 index 0000000000..b3fd81a8b6 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q6.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q6" +--- ++-------+-----+ +| state | cnt | ++-------+-----+ +| NV | 11 | +| VT | 12 | +| MD | 14 | +| ME | 21 | +| NJ | 21 | +| WY | 21 | +| OR | 22 | +| ID | 29 | +| UT | 31 | +| NM | 33 | ++-------+-----+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q60.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q60.snap new file mode 100644 index 0000000000..cbff8ce425 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q60.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q60" +--- ++------------------+-------------+ +| i_item_id | total_sales | ++------------------+-------------+ +| AAAAAAAAAABEAAAA | 21947.82 | +| AAAAAAAAAACAAAAA | 3955.35 | +| AAAAAAAAAACDAAAA | 9763.03 | +| AAAAAAAAAAEAAAAA | 12488.93 | +| AAAAAAAAAAFAAAAA | 4810.55 | +| AAAAAAAAAAGBAAAA | 12975.32 | +| AAAAAAAAAAHDAAAA | 4738.37 | +| AAAAAAAAAAICAAAA | 5672.00 | +| AAAAAAAAAAIDAAAA | 18476.03 | +| AAAAAAAAAAKAAAAA | 11945.04 | ++------------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q61.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q61.snap new file mode 100644 index 0000000000..dab091da86 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q61.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q61" +--- ++------------+-------+-------------------------------------------------------------+ +| promotions | total | promotional_sales.promotions / all_sales.total * Int64(100) | ++------------+-------+-------------------------------------------------------------+ +| | | | ++------------+-------+-------------------------------------------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q62.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q62.snap new file mode 100644 index 0000000000..49c1f47a55 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q62.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q62" +--- ++-------------------------------------------------------+---------+----------+---------+------------+------------+-------------+-----------+ +| substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) | sm_type | web_name | 30 days | 31-60 days | 61-90 days | 91-120 days | >120 days | ++-------------------------------------------------------+---------+----------+---------+------------+------------+-------------+-----------+ +| Conventional childr | EXPRESS | site_0 | 320 | 325 | 309 | 314 | 0 | +| Conventional childr | EXPRESS | site_1 | 280 | 243 | 274 | 276 | 0 | +| Conventional childr | EXPRESS | site_2 | 270 | 279 | 260 | 259 | 0 | +| Conventional childr | EXPRESS | site_3 | 307 | 294 | 314 | 302 | 0 | +| Conventional childr | EXPRESS | site_4 | 303 | 289 | 316 | 307 | 0 | +| Conventional childr | LIBRARY | site_0 | 258 | 229 | 272 | 235 | 0 | +| Conventional childr | LIBRARY | site_1 | 223 | 262 | 248 | 255 | 0 | +| Conventional childr | LIBRARY | site_2 | 238 | 219 | 202 | 204 | 0 | +| Conventional childr | LIBRARY | site_3 | 166 | 208 | 170 | 183 | 0 | +| Conventional childr | LIBRARY | site_4 | 206 | 206 | 200 | 218 | 0 | ++-------------------------------------------------------+---------+----------+---------+------------+------------+-------------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q63.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q63.snap new file mode 100644 index 0000000000..8fafd62015 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q63.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q63" +--- ++--------------+-----------+-------------------+ +| i_manager_id | sum_sales | avg_monthly_sales | ++--------------+-----------+-------------------+ +| 1 | 556.53 | 1677.624166 | +| 1 | 722.00 | 1677.624166 | +| 1 | 927.70 | 1677.624166 | +| 1 | 1142.84 | 1677.624166 | +| 1 | 1222.86 | 1677.624166 | +| 1 | 1233.46 | 1677.624166 | +| 1 | 2000.07 | 1677.624166 | +| 1 | 2477.65 | 1677.624166 | +| 1 | 2888.42 | 1677.624166 | +| 1 | 3866.41 | 1677.624166 | ++--------------+-----------+-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q64.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q64.snap new file mode 100644 index 0000000000..4e78b0b535 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q64.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q64" +--- ++--------------------+------------+-----------+-----------------+----------------+------------+-------+-----------------+---------------+----------------+-------+-------+-----+-------+--------+--------+-------+--------+---------+-------+-----+ +| product_name | store_name | store_zip | b_street_number | b_street_name | b_city | b_zip | c_street_number | c_street_name | c_city | c_zip | syear | cnt | s11 | s21 | s31 | s12 | s22 | s32 | syear | cnt | ++--------------------+------------+-----------+-----------------+----------------+------------+-------+-----------------+---------------+----------------+-------+-------+-----+-------+--------+--------+-------+--------+---------+-------+-----+ +| antiablecallycally | bar | 31904 | 652 | 4th Oak | Highland | 29454 | 311 | Maple Valley | Arlington | 86557 | 2001 | 1 | 4.11 | 4.11 | 0.00 | 23.01 | 26.46 | 0.00 | 2002 | 1 | +| antiablecallycally | bar | 31904 | 728 | Jackson Spring | Woodlawn | 54098 | 634 | Hillcrest | Harmon | 95623 | 2001 | 1 | 19.99 | 22.18 | 0.00 | 23.01 | 26.46 | 0.00 | 2002 | 1 | +| antiablecallycally | eing | 35709 | 708 | Forest | Liberty | 73451 | 687 | West | Concord | 34107 | 2001 | 1 | 37.88 | 66.29 | 0.00 | 57.24 | 109.32 | 0.00 | 2002 | 1 | +| antiablecallycally | eing | 35709 | 708 | Forest | Liberty | 73451 | 687 | West | Concord | 34107 | 2001 | 1 | 37.88 | 66.29 | 0.00 | 67.64 | 126.48 | 3235.75 | 2002 | 1 | +| antiablecallycally | eing | 35709 | 708 | Forest | Liberty | 73451 | 687 | West | Concord | 34107 | 2001 | 1 | 37.88 | 66.29 | 0.00 | 89.78 | 107.73 | 0.00 | 2002 | 1 | +| antiablecallycally | ought | 31904 | 720 | Hill Walnut | Glendale | 43951 | 673 | Walnut South | Green Acres | 57683 | 2001 | 1 | 88.62 | 114.31 | 0.00 | 83.45 | 161.89 | 0.00 | 2002 | 1 | +| antiationcallyese | eing | 35709 | 465 | 4th Hickory | Clifton | 48014 | 165 | Sunset Church | Pleasant Grove | 34136 | 2001 | 1 | 13.41 | 18.77 | 101.20 | 49.69 | 62.11 | 0.00 | 2002 | 1 | +| antiationcallyese | eing | 35709 | 465 | 4th Hickory | Clifton | 48014 | 165 | Sunset Church | Pleasant Grove | 34136 | 2001 | 1 | 13.41 | 18.77 | 101.20 | 86.32 | 138.97 | 5332.03 | 2002 | 1 | +| antiationcallyese | eing | 35709 | 213 | Washington 8th | White Hall | 36955 | 84 | 8th Maple | Oakwood | 60169 | 2001 | 1 | 21.08 | 32.88 | 277.55 | 49.69 | 62.11 | 0.00 | 2002 | 1 | +| antiationcallyese | eing | 35709 | 213 | Washington 8th | White Hall | 36955 | 84 | 8th Maple | Oakwood | 60169 | 2001 | 1 | 21.08 | 32.88 | 277.55 | 86.32 | 138.97 | 5332.03 | 2002 | 1 | ++--------------------+------------+-----------+-----------------+----------------+------------+-------+-----------------+---------------+----------------+-------+-------+-----+-------+--------+--------+-------+--------+---------+-------+-----+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q65.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q65.snap new file mode 100644 index 0000000000..37704d012e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q65.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q65" +--- ++--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-----------------+------------------+---------------------+ +| s_store_name | i_item_desc | revenue | i_current_price | i_wholesale_cost | i_brand | ++--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-----------------+------------------+---------------------+ +| able | Absolutely only blues ask new consequences; also reduced risks may shift simply. White, sorry countries establish long despite the devices. Activ | 34.93 | 3.57 | 2.78 | amalgexporti #1 | +| able | Advantages w | 7.06 | 1.04 | 0.70 | exportimaxi #5 | +| able | American, so-called shoulders will write less shares. Long names could | 28.19 | 52.50 | 45.15 | edu packedu pack #1 | +| able | At last valid problems see as well single, political teams; worldwide widespread words get recent | 6.22 | 0.92 | 0.42 | namelessnameless #9 | +| able | Close, present tears boost almost parties. Seasons can leave formerly now political books. Relationships pick daily, | 36.09 | 2.21 | 1.21 | exportinameless #10 | +| able | Commercial tories present very on a industries. Close strong classes might cause to a men. Professional organisms can incorporate even sharp goods | 15.72 | 7.41 | 3.18 | exportiedu pack #1 | +| able | Conscious years give up to additionally unacceptable for | 20.49 | 3.81 | 1.67 | importoexporti #1 | +| able | Consequences agree owners; immediately sure cards record. Again scottish variations think specifically. Extraordinarily different taxes develop enough about a surroundings. Forward, public clothes es | 31.85 | 8.30 | 3.32 | importobrand #4 | +| able | Critical, royal women like significantly in the contracts. So public police used to describe ani | 6.30 | 4.57 | 1.87 | edu packamalg #1 | +| able | Existing children can set again principal courses. Students might say artists. Russian, high words fail always companies. More large recordings would know well years. Restrictio | 10.73 | 1.63 | 0.65 | amalgunivamalg #2 | ++--------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-----------------+------------------+---------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q66.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q66.snap new file mode 100644 index 0000000000..9a8e7ac8d3 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q66.snap @@ -0,0 +1,13 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q66" +--- ++----------------------+-------------------+----------+-------------------+---------+---------------+---------------+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ +| w_warehouse_name | w_warehouse_sq_ft | w_city | w_county | w_state | w_country | ship_carriers | year | jan_sales | feb_sales | mar_sales | apr_sales | may_sales | jun_sales | jul_sales | aug_sales | sep_sales | oct_sales | nov_sales | dec_sales | jan_sales_per_sq_foot | feb_sales_per_sq_foot | mar_sales_per_sq_foot | apr_sales_per_sq_foot | may_sales_per_sq_foot | jun_sales_per_sq_foot | jul_sales_per_sq_foot | aug_sales_per_sq_foot | sep_sales_per_sq_foot | oct_sales_per_sq_foot | nov_sales_per_sq_foot | dec_sales_per_sq_foot | jan_net | feb_net | mar_net | apr_net | may_net | jun_net | jul_net | aug_net | sep_net | oct_net | nov_net | dec_net | ++----------------------+-------------------+----------+-------------------+---------+---------------+---------------+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ +| Conventional childr | 977787 | Fairview | Williamson County | TN | United States | FEDEX,GERMA | 2001 | 16347527.69 | 15010566.49 | 20661398.10 | 13978032.14 | 20345395.78 | 12328644.39 | 21088623.19 | 43740862.21 | 37363098.66 | 36975922.21 | 71699232.05 | 62504376.44 | 16.718904 | 15.351570 | 21.130775 | 14.295579 | 20.807594 | 12.608721 | 21.567706 | 44.734550 | 38.211899 | 37.815926 | 73.328068 | 63.924327 | 16093940.98 | 12292343.15 | 14705917.59 | 12664532.26 | 13906346.50 | 17491872.62 | 19475706.47 | 27874783.92 | 31661948.44 | 33632167.70 | 53794887.23 | 54918130.40 | +| Of course ot | 138504 | Fairview | Williamson County | TN | United States | FEDEX,GERMA | 2001 | 12676539.78 | 18965161.12 | 12465108.33 | 15124070.03 | 28604909.88 | 17464900.61 | 20865208.39 | 54606157.76 | 37898301.62 | 46677540.21 | 58327407.30 | 63050546.40 | 91.524719 | 136.928616 | 89.998182 | 109.195907 | 206.527680 | 126.096723 | 150.646972 | 394.256900 | 273.626043 | 337.012217 | 421.124351 | 455.225454 | 16878374.79 | 17563017.28 | 15161378.25 | 13779350.76 | 10680276.11 | 15315810.40 | 12454627.55 | 33027915.86 | 21918537.07 | 36536576.38 | 43304988.61 | 58261232.26 | +| Social, royal laws m | 294242 | Fairview | Williamson County | TN | United States | FEDEX,GERMA | 2001 | 12775914.37 | 16006627.47 | 26003273.29 | 10814585.35 | 18134336.42 | 20550918.71 | 22076091.52 | 33432311.24 | 41097944.32 | 45442056.63 | 55673178.27 | 69814499.78 | 43.419750 | 54.399532 | 88.373763 | 36.754049 | 61.630685 | 69.843593 | 75.026989 | 113.621818 | 139.673955 | 154.437695 | 189.208808 | 237.268981 | 15572830.50 | 13901637.46 | 14009994.77 | 11067325.83 | 22694385.98 | 13847677.49 | 15641962.07 | 39444297.30 | 31913225.24 | 38263373.21 | 45105338.56 | 51252851.12 | +| Terms overcome instr | 621234 | Fairview | Williamson County | TN | United States | FEDEX,GERMA | 2001 | 22113781.46 | 13954933.34 | 15779492.30 | 22189612.87 | 20349632.54 | 15644946.75 | 28685796.08 | 35651642.90 | 36071888.92 | 41301165.33 | 52447150.20 | 58004459.33 | 35.596540 | 22.463247 | 25.400239 | 35.718606 | 32.756790 | 25.183661 | 46.175508 | 57.388427 | 58.064898 | 66.482460 | 84.424146 | 93.369743 | 17265170.91 | 11696568.79 | 22420911.82 | 12378050.67 | 16459043.66 | 18755216.71 | 12374193.61 | 32887902.56 | 29055746.64 | 39490580.73 | 52338194.14 | 50077424.10 | +| | | Fairview | Williamson County | TN | United States | FEDEX,GERMA | 2001 | 17721109.48 | 12230881.60 | 18276280.01 | 17197341.58 | 25368302.34 | 14460807.59 | 20193915.83 | 38398261.59 | 36408886.53 | 28830938.28 | 57560963.23 | 68454750.12 | | | | | | | | | | | | | 13798518.17 | 11012738.79 | 14193942.24 | 11830551.00 | 14043519.71 | 9117963.43 | 15106642.80 | 36407717.37 | 35911195.93 | 40663461.24 | 39407801.67 | 63898055.83 | ++----------------------+-------------------+----------+-------------------+---------+---------------+---------------+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q67.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q67.snap new file mode 100644 index 0000000000..9b5d775504 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q67.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q67" +--- ++------------+----------+----------------+----------------+--------+-------+-------+------------+------------+-----+ +| i_category | i_class | i_brand | i_product_name | d_year | d_qoy | d_moy | s_store_id | sumsales | rk | ++------------+----------+----------------+----------------+--------+-------+-------+------------+------------+-----+ +| Books | arts | amalgmaxi #11 | | | | | | 861756.42 | 67 | +| Books | arts | amalgmaxi #2 | | | | | | 762167.55 | 81 | +| Books | arts | amalgmaxi #3 | | | | | | 823182.27 | 72 | +| Books | arts | amalgmaxi #5 | | | | | | 566289.04 | 100 | +| Books | arts | amalgmaxi #8 | | | | | | 723892.80 | 83 | +| Books | arts | amalgmaxi #9 | | | | | | 798302.74 | 75 | +| Books | arts | | | | | | | 5166331.25 | 16 | +| Books | business | importomaxi #2 | | | | | | 1088170.08 | 43 | +| Books | business | importomaxi #5 | | | | | | 583306.06 | 97 | +| Books | business | importomaxi #8 | | | | | | 992362.81 | 53 | ++------------+----------+----------------+----------------+--------+-------+-------+------------+------------+-----+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q68.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q68.snap new file mode 100644 index 0000000000..a33fea57cf --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q68.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q68" +--- ++-------------+--------------+---------------+----------------+------------------+----------------+--------------+------------+ +| c_last_name | c_first_name | ca_city | bought_city | ss_ticket_number | extended_price | extended_tax | list_price | ++-------------+--------------+---------------+----------------+------------------+----------------+--------------+------------+ +| Abbott | Joseph | Greenfield | Midway | 62751 | 26919.52 | 1116.58 | 57080.40 | +| Abbott | Harriet | Wesley | Forest Hills | 84405 | 22861.50 | 1369.56 | 44009.90 | +| Abney | Louis | Gladstone | Green Acres | 140967 | 19446.55 | 877.95 | 32461.55 | +| Acosta | Johnnie | Centerville | Enterprise | 69183 | 11146.93 | 215.50 | 17512.59 | +| Adair | Kimberly | Centerville | Forest Hills | 157619 | 14342.77 | 506.62 | 49363.10 | +| Adams | Jonathon | Highland Park | Pleasant Grove | 26218 | 19024.55 | 813.18 | 38782.23 | +| Adams | Michelle | Unionville | Hillcrest | 55515 | 24054.10 | 1006.01 | 60759.95 | +| Adams | Genevieve | Enterprise | Union Hill | 109910 | 38112.60 | 2078.45 | 68698.50 | +| Adams | David | Bridgeport | Antioch | 213366 | 7487.49 | 228.52 | 16742.78 | +| Adkins | Daniel | Wilson | Providence | 131164 | 20810.88 | 812.72 | 50529.61 | ++-------------+--------------+---------------+----------------+------------------+----------------+--------------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q69.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q69.snap new file mode 100644 index 0000000000..f0b4d20851 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q69.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q69" +--- ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+ +| cd_gender | cd_marital_status | cd_education_status | cnt1 | cd_purchase_estimate | cnt2 | cd_credit_rating | cnt3 | ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+ +| F | D | 2 yr Degree | 1 | 500 | 1 | Unknown | 1 | +| F | D | 2 yr Degree | 1 | 1000 | 1 | High Risk | 1 | +| F | D | 2 yr Degree | 1 | 3500 | 1 | Good | 1 | +| F | D | 2 yr Degree | 1 | 3500 | 1 | Low Risk | 1 | +| F | D | 2 yr Degree | 1 | 4000 | 1 | High Risk | 1 | +| F | D | 2 yr Degree | 1 | 7500 | 1 | Unknown | 1 | +| F | D | 2 yr Degree | 1 | 8000 | 1 | High Risk | 1 | +| F | D | 2 yr Degree | 1 | 9500 | 1 | Low Risk | 1 | +| F | D | 4 yr Degree | 1 | 1000 | 1 | High Risk | 1 | +| F | D | 4 yr Degree | 1 | 2000 | 1 | High Risk | 1 | ++-----------+-------------------+---------------------+------+----------------------+------+------------------+------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q7.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q7.snap new file mode 100644 index 0000000000..909afde52f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q7.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q7" +--- ++------------------+------+------------+------------+------------+ +| i_item_id | agg1 | agg2 | agg3 | agg4 | ++------------------+------+------------+------------+------------+ +| AAAAAAAAAAABAAAA | 8.5 | 128.765000 | 58.625000 | 45.005000 | +| AAAAAAAAAAACAAAA | 51.0 | 10.860000 | 62.650000 | 1.950000 | +| AAAAAAAAAAAEAAAA | 46.0 | 110.430000 | 265.515000 | 38.970000 | +| AAAAAAAAAABEAAAA | 25.0 | 98.540000 | 66.185000 | 78.240000 | +| AAAAAAAAAACDAAAA | 18.0 | 57.800000 | 0.000000 | 51.440000 | +| AAAAAAAAAADBAAAA | 89.0 | 157.080000 | 0.000000 | 149.220000 | +| AAAAAAAAAAEDAAAA | 39.0 | 64.320000 | 0.000000 | 48.360000 | +| AAAAAAAAAAEEAAAA | 22.0 | 161.520000 | 0.000000 | 19.380000 | +| AAAAAAAAAAFDAAAA | 88.0 | 10.500000 | 0.000000 | 8.610000 | +| AAAAAAAAAAGBAAAA | 78.0 | 2.520000 | 0.000000 | 0.950000 | ++------------------+------+------------+------------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q70.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q70.snap new file mode 100644 index 0000000000..0d376b3986 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q70.snap @@ -0,0 +1,11 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q70" +--- ++---------------+---------+-------------------+--------------+--------------------+ +| total_sum | s_state | s_county | lochierarchy | rank_within_parent | ++---------------+---------+-------------------+--------------+--------------------+ +| -445095493.15 | | | 2 | 1 | +| -445095493.15 | TN | | 1 | 1 | +| -445095493.15 | TN | Williamson County | 0 | 1 | ++---------------+---------+-------------------+--------------+--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q71.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q71.snap new file mode 100644 index 0000000000..ce8faae24e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q71.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q71" +--- ++----------+----------------------+--------+----------+-----------+ +| brand_id | brand | t_hour | t_minute | ext_price | ++----------+----------------------+--------+----------+-----------+ +| 1003002 | exportiamalg #2 | 17 | 40 | | +| 2004001 | edu packunivamalg #8 | 18 | 20 | | +| 4002001 | scholarmaxi #6 | 18 | 43 | | +| 4003001 | exportiexporti #2 | 17 | 4 | | +| 4003002 | exportiedu pack #2 | 9 | 8 | | +| 6012008 | importobrand #8 | 8 | 41 | | +| 6015006 | scholarbrand #6 | 17 | 6 | | +| 8005009 | corpnameless #10 | 19 | 18 | | +| 10005003 | amalgscholar #2 | 9 | 42 | | +| 6012008 | importobrand #8 | 18 | 52 | 22262.66 | ++----------+----------------------+--------+----------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q72.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q72.snap new file mode 100644 index 0000000000..8b87c4244f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q72.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q72" +--- ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+------------+----------+-------+-----------+ +| i_item_desc | w_warehouse_name | d_week_seq | no_promo | promo | total_cnt | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+------------+----------+-------+-----------+ +| Annual, red circumstances see simply by a scientists. Tory eyebrows shall not see positively new parts. Personal boxes disagree. Red, alternative approaches acquire. Tomorrow native thanks ma | | 5175 | 0 | 2 | 2 | +| Apparent, old members should gain then outdoor properties. Feet ought to persuade. Good casual programmes should not want locally powers. Frequently military producers can change servic | | 5217 | 0 | 2 | 2 | +| Boys used to argue civil, future refugees. Mental decisions could not stop spiritual newspapers. Sources present international parents. Expected, different reasons will not see simply serious s | | 5201 | 0 | 2 | 2 | +| Difficult, public women go so forces. New, small reasons should not think. Partly common policies seem at least available makers. So large children must appear only tory, | Conventional childr | 5213 | 0 | 2 | 2 | +| Economic scientists cannot give readily italian savings. Just lesser thoughts need lightly lar | Conventional childr | 5176 | 0 | 2 | 2 | +| Electronic, popular women ought to believe narrowly technical areas. Psychiatric goods hear widely. Other surroundings shall come for example fashionable, main managers. Financial | Of course ot | 5185 | 0 | 2 | 2 | +| English, effective thousands make | Terms overcome instr | 5185 | 0 | 2 | 2 | +| Folk want still sections. Then real areas leave yes | Social, royal laws m | 5214 | 0 | 2 | 2 | +| Furth | Terms overcome instr | 5213 | 0 | 2 | 2 | +| Great, ordinary houses should not express. Origins might offer mor | Conventional childr | 5210 | 0 | 2 | 2 | ++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+------------+----------+-------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q73.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q73.snap new file mode 100644 index 0000000000..e762ead4d4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q73.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q73" +--- ++-------------+--------------+--------------+-----------------------+------------------+-----+ +| c_last_name | c_first_name | c_salutation | c_preferred_cust_flag | ss_ticket_number | cnt | ++-------------+--------------+--------------+-----------------------+------------------+-----+ +| Carlson | Bertha | Dr. | Y | 29443 | 5 | +| Thomas | | | Y | 151591 | 5 | ++-------------+--------------+--------------+-----------------------+------------------+-----+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q74.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q74.snap new file mode 100644 index 0000000000..bb77e36726 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q74.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q74" +--- ++------------------+---------------------+--------------------+ +| customer_id | customer_first_name | customer_last_name | ++------------------+---------------------+--------------------+ +| AAAAAAAAIADEBAAA | Diane | Aldridge | +| AAAAAAAALIOPAAAA | Derek | Allen | +| AAAAAAAAIBHHAAAA | Jennifer | Ballard | +| AAAAAAAAHMJNAAAA | Ryan | Baptiste | +| AAAAAAAACGKBBAAA | Betty | Bell | +| AAAAAAAAKBCABAAA | Debra | Bell | +| AAAAAAAAHJLAAAAA | Audrey | Beltran | +| AAAAAAAAEOAKAAAA | Molly | Benjamin | +| AAAAAAAADLHBBAAA | Henry | Bertrand | +| AAAAAAAADBEFBAAA | Bennie | Bowers | ++------------------+---------------------+--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q75.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q75.snap new file mode 100644 index 0000000000..c6582664c9 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q75.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q75" +--- ++-----------+------+------------+------------+---------------+---------------+-------------+-------------+----------------+-------------------------+ +| prev_year | year | i_brand_id | i_class_id | i_category_id | i_manufact_id | prev_yr_cnt | curr_yr_cnt | sales_cnt_diff | sales_amt_diff | ++-----------+------+------------+------------+---------------+---------------+-------------+-------------+----------------+-------------------------+ +| 1999 | 2000 | 4003001 | 3 | 4 | 173 | 16512 | 4114 | -12398 | -505410.150000000000000 | +| 1999 | 2000 | 4002001 | 2 | 4 | 707 | 11117 | 157 | -10960 | -494537.650000000000000 | +| 1999 | 2000 | 4002001 | 2 | 4 | 428 | 10936 | 39 | -10897 | -465012.900000000000000 | +| 1999 | 2000 | 4004001 | 4 | 4 | 147 | 10356 | 12 | -10344 | -458542.740000000000000 | +| 1999 | 2000 | 4004001 | 4 | 4 | 305 | 9319 | 2 | -9317 | -397274.310000000000000 | +| 1999 | 2000 | 4003001 | 3 | 4 | 8 | 10973 | 4024 | -6949 | -288623.270000000000000 | +| 1999 | 2000 | 4001001 | 1 | 4 | 167 | 6652 | 34 | -6618 | -285788.000000000000000 | +| 1999 | 2000 | 4004001 | 4 | 4 | 286 | 10913 | 4391 | -6522 | -288340.380000000000000 | +| 1999 | 2000 | 4002001 | 2 | 4 | 489 | 10698 | 4323 | -6375 | -268343.720000000000000 | +| 1999 | 2000 | 4004001 | 4 | 4 | 414 | 9968 | 3608 | -6360 | -284897.310000000000000 | ++-----------+------+------------+------------+---------------+---------------+-------------+-------------+----------------+-------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q76.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q76.snap new file mode 100644 index 0000000000..c7f024d87f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q76.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q76" +--- ++---------+---------------------+--------+-------+-------------+-----------+-----------+ +| channel | col_name | d_year | d_qoy | i_category | sales_cnt | sales_amt | ++---------+---------------------+--------+-------+-------------+-----------+-----------+ +| catalog | cs_bill_customer_sk | 1998 | 1 | Books | 11 | 831.89 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Children | 12 | 19265.11 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Electronics | 16 | 6008.82 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Home | 9 | 9927.12 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Jewelry | 10 | 30472.71 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Men | 7 | 6998.10 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Music | 13 | 1292.12 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Shoes | 10 | 929.61 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Sports | 9 | 157.76 | +| catalog | cs_bill_customer_sk | 1998 | 1 | Women | 9 | 22636.20 | ++---------+---------------------+--------+-------+-------------+-----------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q77.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q77.snap new file mode 100644 index 0000000000..7f16919ba7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q77.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q77" +--- ++-----------------+----+--------------+------------+--------------+ +| channel | id | sales | returns | profit | ++-----------------+----+--------------+------------+--------------+ +| catalog channel | 1 | 136496133.90 | 1977144.03 | -14857629.58 | +| catalog channel | 3 | 133445712.80 | 1977144.03 | -13874851.83 | +| catalog channel | 5 | 136849440.15 | 1977144.03 | -15427339.98 | +| catalog channel | | 796469.90 | 1977144.03 | -1252024.08 | +| catalog channel | | 407587756.75 | 7908576.12 | -45411845.47 | +| store channel | 1 | 19638349.68 | 474304.95 | -8836808.53 | +| store channel | 2 | 18979671.24 | 563536.42 | -8428489.93 | +| store channel | 4 | 19478905.32 | 402779.93 | -8542435.83 | +| store channel | 7 | 18397866.79 | 460011.92 | -8059899.92 | +| store channel | 8 | 19543644.01 | 399948.74 | -8535878.60 | ++-----------------+----+--------------+------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q78.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q78.snap new file mode 100644 index 0000000000..d3566c08ee --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q78.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q78" +--- ++----------------+-------+-----------+----------------------+-------------------+----------------+---------------------------+------------------------+ +| ss_customer_sk | ratio | store_qty | store_wholesale_cost | store_sales_price | other_chan_qty | other_chan_wholesale_cost | other_chan_sales_price | ++----------------+-------+-----------+----------------------+-------------------+----------------+---------------------------+------------------------+ +| 525 | 0.0 | 6 | 59.38 | 13.01 | 45 | 58.93 | 39.34 | +| 811 | 31.0 | 63 | 50.39 | 18.25 | 2 | 38.41 | 48.85 | +| 1861 | 0.0 | 11 | 18.36 | 20.64 | 69 | 74.03 | 19.58 | +| 3316 | 0.0 | 46 | 13.40 | 16.82 | 59 | 44.18 | 13.89 | +| 3749 | 0.0 | 42 | 48.38 | 70.63 | 51 | 86.44 | 105.92 | +| 4169 | 0.0 | 12 | 86.88 | 31.03 | 25 | 80.41 | 66.61 | +| 5136 | 0.0 | 1 | 74.19 | 23.14 | 5 | 4.56 | 2.21 | +| 5138 | 1.0 | 82 | 31.33 | 4.03 | 43 | 91.69 | 110.94 | +| 5835 | 5.0 | 72 | 13.68 | 19.09 | 13 | 97.46 | 114.46 | +| 6072 | 1.0 | 99 | 41.23 | 11.82 | 80 | 6.43 | 1.73 | ++----------------+-------+-----------+----------------------+-------------------+----------------+---------------------------+------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q79.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q79.snap new file mode 100644 index 0000000000..1af64ed01f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q79.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q79" +--- ++-------------+--------------+--------------------------------------+------------------+----------+-----------+ +| c_last_name | c_first_name | substr(ms.s_city,Int64(1),Int64(30)) | ss_ticket_number | amt | profit | ++-------------+--------------+--------------------------------------+------------------+----------+-----------+ +| Abbott | Harriet | Midway | 111376 | 0.00 | -2946.62 | +| Abel | Ida | Fairview | 130398 | 1793.62 | -6395.73 | +| Abrams | Fannie | Midway | 177397 | 7743.84 | -13060.99 | +| Ackerman | Jeffrey | Midway | 198943 | 1002.45 | -5494.51 | +| Adams | Beth | Midway | 73934 | 3831.86 | -20607.93 | +| Adams | Farrah | Midway | 65201 | 0.00 | -686.63 | +| Adams | Juan | Fairview | 216356 | 582.88 | -8911.99 | +| Adams | Kimberly | Midway | 42898 | 3389.37 | -4579.24 | +| Adams | Lashawn | Fairview | 3833 | 3916.66 | 5.79 | +| Adams | Matilde | Midway | 3209 | 13266.23 | -12751.79 | ++-------------+--------------+--------------------------------------+------------------+----------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q8.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q8.snap new file mode 100644 index 0000000000..4b407899c5 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q8.snap @@ -0,0 +1,6 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q8" +--- +++ +++ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q80.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q80.snap new file mode 100644 index 0000000000..d34c322668 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q80.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q80" +--- ++-----------------+------------------------------+----------+---------+-----------+ +| channel | id | sales | returns | profit | ++-----------------+------------------------------+----------+---------+-----------+ +| catalog channel | catalog_pageAAAAAAAAAAPBAAAA | 9429.87 | 0.00 | -15357.45 | +| catalog channel | catalog_pageAAAAAAAAABBCAAAA | 2112.48 | 0.00 | -800.35 | +| catalog channel | catalog_pageAAAAAAAAABPBAAAA | 31147.33 | 0.00 | -2459.47 | +| catalog channel | catalog_pageAAAAAAAAACBCAAAA | 1949.40 | 0.00 | 723.90 | +| catalog channel | catalog_pageAAAAAAAAACPBAAAA | 18680.19 | 2119.26 | -18719.37 | +| catalog channel | catalog_pageAAAAAAAAADPBAAAA | 30455.40 | 908.60 | 8010.43 | +| catalog channel | catalog_pageAAAAAAAAAEPBAAAA | 24981.73 | 0.00 | 1617.00 | +| catalog channel | catalog_pageAAAAAAAAAFPBAAAA | 5466.70 | 0.00 | -8074.72 | +| catalog channel | catalog_pageAAAAAAAAAGBCAAAA | 8679.82 | 0.00 | -2615.72 | +| catalog channel | catalog_pageAAAAAAAAAGPBAAAA | 22043.07 | 2711.57 | -2209.34 | ++-----------------+------------------------------+----------+---------+-----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q81.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q81.snap new file mode 100644 index 0000000000..9872d51245 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q81.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q81" +--- ++------------------+--------------+--------------+-------------+------------------+----------------+----------------+-----------------+--------------+----------------+----------+--------+---------------+---------------+------------------+------------------+ +| c_customer_id | c_salutation | c_first_name | c_last_name | ca_street_number | ca_street_name | ca_street_type | ca_suite_number | ca_city | ca_county | ca_state | ca_zip | ca_country | ca_gmt_offset | ca_location_type | ctr_total_return | ++------------------+--------------+--------------+-------------+------------------+----------------+----------------+-----------------+--------------+----------------+----------+--------+---------------+---------------+------------------+------------------+ +| AAAAAAAAAADLAAAA | | | | 251 | 7th | RD | Suite X | Edgewood | Cooke County | TX | 70069 | United States | -6.00 | condo | 1774.03 | +| AAAAAAAAAEMKAAAA | Mrs. | Charlotte | Harvey | 342 | Green Madison | Court | Suite H | Riverside | Aransas County | TX | 79231 | United States | -6.00 | condo | 3776.13 | +| AAAAAAAAAENGBAAA | Mrs. | Allyson | Chavez | 905 | Valley South | Ave | Suite L | White Oak | Crosby County | TX | 76668 | United States | -6.00 | single family | 2440.92 | +| AAAAAAAAAEPGBAAA | Dr. | Pamela | Connor | 797 | Maple | Ave | Suite D | Cedar Grove | Kaufman County | TX | 70411 | United States | -6.00 | apartment | 3220.02 | +| AAAAAAAAAFCGAAAA | Mr. | Jordan | West | 529 | Third Fourth | Parkway | Suite V | Bethesda | Orange County | TX | 75980 | United States | -6.00 | condo | 1939.01 | +| AAAAAAAAAGFFBAAA | Dr. | Joe | Rogers | 374 | Seventh | Ct. | Suite 330 | Sunnyside | Houston County | TX | 71952 | United States | -6.00 | apartment | 2780.94 | +| AAAAAAAAAGMKAAAA | Dr. | Jerry | Harris | 155 | East | Boulevard | Suite Y | Clifton | Brown County | TX | 78014 | United States | -6.00 | apartment | 9241.27 | +| AAAAAAAAAGPGAAAA | Sir | Joe | Irving | 262 | Sixth | Blvd | Suite 360 | Providence | Martin County | TX | 76614 | United States | -6.00 | apartment | 4618.25 | +| AAAAAAAAAHHEBAAA | Mrs. | Laura | Kaufman | 39 | 9th Woodland | Boulevard | Suite 390 | Walnut Grove | Refugio County | TX | 77752 | United States | -6.00 | condo | 8621.05 | +| AAAAAAAAAHNEBAAA | Dr. | William | Soto | 163 | Park Highland | Ct. | Suite 60 | Union | Donley County | TX | 78721 | United States | -6.00 | apartment | 5151.03 | ++------------------+--------------+--------------+-------------+------------------+----------------+----------------+-----------------+--------------+----------------+----------+--------+---------------+---------------+------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q82.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q82.snap new file mode 100644 index 0000000000..f5cb0bc105 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q82.snap @@ -0,0 +1,11 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q82" +--- ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+ +| i_item_id | i_item_desc | i_current_price | ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+ +| AAAAAAAABMGDAAAA | Persiste | 72.60 | +| AAAAAAAADNADAAAA | Very capable services compromise in a firms. Never prime firms scrape hardly. Troops may double however. Good, red houses s | 91.62 | +| AAAAAAAAEEMCAAAA | Thick, positive readers return in the explanations; police sell about perfect groups. Difficult, integrated motives would not allow here at a pubs. Ready marks b | 87.93 | ++------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q83.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q83.snap new file mode 100644 index 0000000000..cee49a7c41 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q83.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q83" +--- ++------------------+-------------+--------+-------------+--------+-------------+--------+--------------------+ +| item_id | sr_item_qty | sr_dev | cr_item_qty | cr_dev | wr_item_qty | wr_dev | average | ++------------------+-------------+--------+-------------+--------+-------------+--------+--------------------+ +| AAAAAAAAAGFDAAAA | 28 | 0.0 | 1 | 0.0 | 1 | 0.0 | 10.0 | +| AAAAAAAAAMOAAAAA | 51 | 0.0 | 57 | 0.0 | 38 | 0.0 | 48.666666666666664 | +| AAAAAAAACBFDAAAA | 29 | 0.0 | 29 | 0.0 | 5 | 0.0 | 21.0 | +| AAAAAAAADJOCAAAA | 12 | 0.0 | 50 | 0.0 | 8 | 0.0 | 23.333333333333332 | +| AAAAAAAAEDECAAAA | 10 | 0.0 | 60 | 0.0 | 32 | 0.0 | 34.0 | +| AAAAAAAAEDHAAAAA | 114 | 0.0 | 50 | 0.0 | 44 | 0.0 | 69.33333333333333 | +| AAAAAAAAEFOAAAAA | 89 | 0.0 | 1 | 0.0 | 20 | 0.0 | 36.666666666666664 | +| AAAAAAAAEJEDAAAA | 9 | 0.0 | 53 | 0.0 | 38 | 0.0 | 33.333333333333336 | +| AAAAAAAAFCIBAAAA | 56 | 0.0 | 2 | 0.0 | 22 | 0.0 | 26.666666666666668 | +| AAAAAAAAFIMAAAAA | 10 | 0.0 | 61 | 0.0 | 72 | 0.0 | 47.666666666666664 | ++------------------+-------------+--------+-------------+--------+-------------+--------+--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q84.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q84.snap new file mode 100644 index 0000000000..b984e9ca50 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q84.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q84" +--- ++------------------+-----------------+ +| customer_id | customername | ++------------------+-----------------+ +| AAAAAAAAAENGBAAA | Chavez, Allyson | +| AAAAAAAAEFEBBAAA | Shepherd, Linda | +| AAAAAAAAEGPDAAAA | Garcia, Rose | +| AAAAAAAAHJHBAAAA | Brewer, Richard | +| AAAAAAAAHNFDAAAA | Gaskin, Helen | +| AAAAAAAAIIHCAAAA | Fisher, Helene | +| AAAAAAAAIJMGAAAA | Oakes, Joseph | +| AAAAAAAAJHACAAAA | Rose, Nancy | +| AAAAAAAAJNHAAAAA | Dixon, Nicole | +| AAAAAAAAKBGDAAAA | Bowen, Daniel | ++------------------+-----------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q85.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q85.snap new file mode 100644 index 0000000000..bd67e3d6c8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q85.snap @@ -0,0 +1,10 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q85" +--- ++-------------------------------------------------+----------------------------+-----------------------------------+-------------------------+ +| substr(reason.r_reason_desc,Int64(1),Int64(20)) | avg(web_sales.ws_quantity) | avg(web_returns.wr_refunded_cash) | avg(web_returns.wr_fee) | ++-------------------------------------------------+----------------------------+-----------------------------------+-------------------------+ +| Stopped working | 18.0 | 29.150000 | 57.690000 | +| Wrong size | 7.0 | 29.240000 | 14.810000 | ++-------------------------------------------------+----------------------------+-----------------------------------+-------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q86.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q86.snap new file mode 100644 index 0000000000..0a004267c7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q86.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q86" +--- ++--------------+-------------+---------+--------------+--------------------+ +| total_sum | i_category | i_class | lochierarchy | rank_within_parent | ++--------------+-------------+---------+--------------+--------------------+ +| 325484115.55 | | | 2 | 1 | +| 33787327.06 | Shoes | | 1 | 1 | +| 33686392.79 | Music | | 1 | 2 | +| 32806114.19 | Electronics | | 1 | 3 | +| 32772210.55 | Men | | 1 | 4 | +| 32363931.24 | Jewelry | | 1 | 5 | +| 32304101.38 | Books | | 1 | 6 | +| 32244951.32 | Women | | 1 | 7 | +| 31697270.31 | Children | | 1 | 8 | +| 31652231.77 | Sports | | 1 | 9 | ++--------------+-------------+---------+--------------+--------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q87.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q87.snap new file mode 100644 index 0000000000..8b664d240f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q87.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q87" +--- ++----------+ +| count(*) | ++----------+ +| 46449 | ++----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q88.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q88.snap new file mode 100644 index 0000000000..478a6a737e --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q88.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q88" +--- ++------------+------------+-------------+--------------+--------------+--------------+--------------+--------------+ +| h8_30_to_9 | h9_to_9_30 | h9_30_to_10 | h10_to_10_30 | h10_30_to_11 | h11_to_11_30 | h11_30_to_12 | h12_to_12_30 | ++------------+------------+-------------+--------------+--------------+--------------+--------------+--------------+ +| 2518 | 4940 | 4874 | 8248 | 7435 | 4166 | 4425 | 5144 | ++------------+------------+-------------+--------------+--------------+--------------+--------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q89.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q89.snap new file mode 100644 index 0000000000..8746a75fe1 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q89.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q89" +--- ++------------+-----------+--------------------+--------------+----------------+-------+-----------+-------------------+ +| i_category | i_class | i_brand | s_store_name | s_company_name | d_moy | sum_sales | avg_monthly_sales | ++------------+-----------+--------------------+--------------+----------------+-------+-----------+-------------------+ +| Music | classical | edu packscholar #2 | ation | Unknown | 3 | 3298.11 | 7507.714166 | +| Music | classical | edu packscholar #2 | ation | Unknown | 4 | 3550.86 | 7507.714166 | +| Music | classical | edu packscholar #2 | able | Unknown | 6 | 3755.79 | 7687.866666 | +| Music | classical | edu packscholar #2 | able | Unknown | 2 | 3757.45 | 7687.866666 | +| Music | classical | edu packscholar #2 | bar | Unknown | 6 | 3408.82 | 7242.218333 | +| Music | classical | edu packscholar #2 | eing | Unknown | 5 | 3720.76 | 7549.881666 | +| Children | infants | importoexporti #2 | ese | Unknown | 3 | 3152.45 | 6935.281666 | +| Music | classical | edu packscholar #2 | ese | Unknown | 3 | 3692.96 | 7471.503333 | +| Music | classical | edu packscholar #2 | eing | Unknown | 7 | 3778.65 | 7549.881666 | +| Children | infants | importoexporti #2 | bar | Unknown | 2 | 2986.60 | 6742.470000 | ++------------+-----------+--------------------+--------------+----------------+-------+-----------+-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q9.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q9.snap new file mode 100644 index 0000000000..be96a81a32 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q9.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q9" +--- ++-----------+------------+------------+------------+------------+ +| bucket1 | bucket2 | bucket3 | bucket4 | bucket5 | ++-----------+------------+------------+------------+------------+ +| 39.586662 | 116.114976 | 192.439185 | 267.187661 | 342.966758 | ++-----------+------------+------------+------------+------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q90.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q90.snap new file mode 100644 index 0000000000..d484b3b88f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q90.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q90" +--- ++-------------+ +| am_pm_ratio | ++-------------+ +| 1.10978043 | ++-------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q91.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q91.snap new file mode 100644 index 0000000000..a20d787745 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q91.snap @@ -0,0 +1,11 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q91" +--- ++------------------+------------------+--------------+--------------+ +| Call_Center | Call_Center_Name | Manager | Returns_Loss | ++------------------+------------------+--------------+--------------+ +| AAAAAAAABAAAAAAA | NY Metro | Bob Belcher | 3803.30 | +| AAAAAAAAEAAAAAAA | North Midwest | Larry Mccray | 3486.41 | +| AAAAAAAAEAAAAAAA | North Midwest | Larry Mccray | 490.38 | ++------------------+------------------+--------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q92.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q92.snap new file mode 100644 index 0000000000..58f702834c --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q92.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q92" +--- ++------------------------+ +| Excess Discount Amount | ++------------------------+ +| | ++------------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q93.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q93.snap new file mode 100644 index 0000000000..fa270418b8 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q93.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q93" +--- ++----------------+----------+ +| ss_customer_sk | sumsales | ++----------------+----------+ +| 159 | 0.00 | +| 810 | 0.00 | +| 960 | 0.00 | +| 1138 | 0.00 | +| 1165 | 0.00 | +| 2538 | 0.00 | +| 2723 | 0.00 | +| 2955 | 0.00 | +| 2958 | 0.00 | +| 3124 | 0.00 | ++----------------+----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q94.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q94.snap new file mode 100644 index 0000000000..0474dca38f --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q94.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q94" +--- ++-------------+---------------------+------------------+ +| order count | total shipping cost | total net profit | ++-------------+---------------------+------------------+ +| 10 | 11670.10 | 2179.34 | ++-------------+---------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q95.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q95.snap new file mode 100644 index 0000000000..d2ec9f9104 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q95.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q95" +--- ++-------------+---------------------+------------------+ +| order count | total shipping cost | total net profit | ++-------------+---------------------+------------------+ +| 3 | 17845.49 | 4454.26 | ++-------------+---------------------+------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q96.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q96.snap new file mode 100644 index 0000000000..e779d864a0 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q96.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q96" +--- ++----------+ +| count(*) | ++----------+ +| 950 | ++----------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q97.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q97.snap new file mode 100644 index 0000000000..95cac82ff4 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q97.snap @@ -0,0 +1,9 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q97" +--- ++------------+--------------+-------------------+ +| store_only | catalog_only | store_and_catalog | ++------------+--------------+-------------------+ +| 532651 | 285222 | 142 | ++------------+--------------+-------------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q98.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q98.snap new file mode 100644 index 0000000000..c2abcf10c7 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q98.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q98" +--- ++------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-------------+-----------------+-------------+--------------+ +| i_item_id | i_item_desc | i_category | i_class | i_current_price | itemrevenue | revenueratio | ++------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-------------+-----------------+-------------+--------------+ +| AAAAAAAAAABBAAAA | Sides let essentially quite new materials. Sources must read now with the journals; sometimes financial supporters | Men | accessories | 5.21 | 5135.95 | 0.429424 | +| AAAAAAAAAAFDAAAA | Serious, respectable homes help po | Men | accessories | 3.14 | 3468.89 | 0.290039 | +| AAAAAAAAABAAAAAA | Unquestionably different demands may not turn worldwide false, wide police. Satisfied, littl | Men | accessories | 6.49 | 6268.53 | 0.524121 | +| AAAAAAAAABOCAAAA | Common, scientific quantities need once once southern reasons. Societies leap less. Little, legal readers move english, particular cells. Emp | Men | accessories | 3.68 | 3344.58 | 0.279645 | +| AAAAAAAAACBEAAAA | Powerful occasions used to tackle plans; tough things could perform certainly children. Administrative, useful pr | Men | accessories | 3.33 | 6238.88 | 0.521642 | +| AAAAAAAAACCDAAAA | Under little conditions will jump drivers. Raw millions exploit well too little dogs. Theoretical in | Men | accessories | 4.09 | 5684.31 | 0.475274 | +| AAAAAAAAACGAAAAA | Other, likely eyes call thoroughly english others. Grounds think more initially friendly forms. Responsible minutes would use as. Present, individual sit | Men | accessories | 6.86 | 1390.46 | 0.116258 | +| AAAAAAAAADAEAAAA | Residential, executive recommendations must not stop also teenage feet. Currently shallow foods shall give just as a whole blue | Men | accessories | 4.20 | 1519.70 | 0.127064 | +| AAAAAAAAAEDAAAAA | Modern farmers decide wild, usual efforts. Great needs matter without the communities; levels might abandon on a pa | Men | accessories | 87.37 | 578.82 | 0.048396 | +| AAAAAAAAAEJDAAAA | Stars provide long. Difficu | Men | accessories | 8.56 | 18531.36 | 1.549436 | ++------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+------------+-------------+-----------------+-------------+--------------+ diff --git a/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q99.snap b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q99.snap new file mode 100644 index 0000000000..c98f144c61 --- /dev/null +++ b/crates/test-framework/src/snapshot/snapshots/results/test_framework__spicetest__datasets__worker__s3[parquet]-federated_tpcds_q99.snap @@ -0,0 +1,18 @@ +--- +source: crates/test-framework/src/spicetest/datasets/worker.rs +description: "Query: tpcds_q99" +--- ++-------------------------------------------------------+-----------+---------------+---------+------------+------------+-------------+-----------+ +| substr(warehouse.w_warehouse_name,Int64(1),Int64(20)) | sm_type | cc_name | 30 days | 31-60 days | 61-90 days | 91-120 days | >120 days | ++-------------------------------------------------------+-----------+---------------+---------+------------+------------+-------------+-----------+ +| Conventional childr | EXPRESS | Mid Atlantic | 1267 | 1327 | 1250 | 0 | 0 | +| Conventional childr | EXPRESS | NY Metro | 1269 | 1263 | 1266 | 0 | 0 | +| Conventional childr | EXPRESS | North Midwest | 1173 | 1253 | 1342 | 0 | 0 | +| Conventional childr | LIBRARY | Mid Atlantic | 940 | 952 | 950 | 0 | 0 | +| Conventional childr | LIBRARY | NY Metro | 944 | 958 | 951 | 0 | 0 | +| Conventional childr | LIBRARY | North Midwest | 930 | 910 | 958 | 0 | 0 | +| Conventional childr | NEXT DAY | Mid Atlantic | 1231 | 1246 | 1335 | 0 | 0 | +| Conventional childr | NEXT DAY | NY Metro | 1239 | 1236 | 1268 | 0 | 0 | +| Conventional childr | NEXT DAY | North Midwest | 1245 | 1268 | 1364 | 0 | 0 | +| Conventional childr | OVERNIGHT | Mid Atlantic | 878 | 961 | 934 | 0 | 0 | ++-------------------------------------------------------+-----------+---------------+---------+------------+------------+-------------+-----------+ diff --git a/test/spicepods/tpch/sf1/accelerated/mysql-duckdb[file].yaml b/test/spicepods/tpch/sf1/accelerated/mysql-duckdb[file].yaml new file mode 100644 index 0000000000..20616fcf7b --- /dev/null +++ b/test/spicepods/tpch/sf1/accelerated/mysql-duckdb[file].yaml @@ -0,0 +1,59 @@ +version: v1 +kind: Spicepod +name: mysql-duckdb[file] + +# Define common anchors +definitions: + # Common mysql parameters + - &mysql_params + mysql_host: ${env:MYSQL_HOST} + mysql_tcp_port: ${env:MYSQL_TCP_PORT} + mysql_db: ${env:MYSQL_DB} + mysql_user: ${env:MYSQL_USER} + mysql_pass: ${env:MYSQL_PASSWORD} + mysql_sslmode: disabled + - &acceleration + enabled: true + engine: duckdb + mode: file + +datasets: + - from: mysql:customer + name: customer + params: *mysql_params + acceleration: *acceleration + + - from: mysql:lineitem + name: lineitem + params: *mysql_params + acceleration: *acceleration + + - from: mysql:nation + name: nation + params: *mysql_params + acceleration: *acceleration + + - from: mysql:orders + name: orders + params: *mysql_params + acceleration: *acceleration + + - from: mysql:part + name: part + params: *mysql_params + acceleration: *acceleration + + - from: mysql:partsupp + name: partsupp + params: *mysql_params + acceleration: *acceleration + + - from: mysql:region + name: region + params: *mysql_params + acceleration: *acceleration + + - from: mysql:supplier + name: supplier + params: *mysql_params + acceleration: *acceleration