This is part of our commercial offering.

V1Join

polyaxon.polyflow.joins.V1Join(ref=None, query=None, sort=None, limit=None, offset=None, params=None)

Joins allow to query several runs based on a search specification.

The result of the join will be a list of values based on the results from executing the search.

A Join corresponds to a valid query specification, the result of the search will be used to resolve the params defined in the join.

joins:
  - query: "metrics.loss: <0.01"
    sort: "metrics.loss"
    limit: 5
    params:
      all_param1:
        value: inputs.param1
      all_result1:
        value: outputs.result1
      all_result2:
        value: outputs.result2
      tensorboard_paths:
        value: artifacts.tensorboard
        contextOnly: true
  - query: "metrics.accuracy: >.9"
    sort: "-metrics.accuracy"
    params:
      all_inputs:
        value: inputs
      all_outputs:
        value: outputs
      run_artifact_paths:
        value: artifacts.base
      uuids:
        value: globals.uuid
        contextOnly: true
      files:
        value: {files: ["subpath/files", "subpath2/file2"]}
        toInit: true
joins = [
    V1Join(
        query="metrics.loss: <0.01",
        sort="metrics.loss",
        limit=5,
        params={
            "all_param1": V1JoinParam(value="inputs.param1"),
            "all_result1": V1JoinParam(value="outputs.result1"),
            "all_result2": V1JoinParam(value="outputs.result2"),
            "tensorboard_paths": V1JoinParam(
                value="artifacts.tensorboard", context_only=True
            ),
        },
    ),
    V1Join(
        query="metrics.accuracy: >.9",
        sort="-metrics.accuracy",
        params={
            "all_inputs": V1JoinParam(value="inputs"),
            "all_outputs": V1JoinParam(value="outputs"),
            "run_artifact_paths": V1JoinParam(value="artifacts")
            "uuids": V1JoinParam(value="globals.uuid"),
            "artifacts": V1JoinParam(
                value={files: ["subpath/files", "subpath2/file2"]},
                to_init=True,
            ),
        }
    )
]

This will instruct Polyaxon to perform 2 searches. Each search will expose the params to be used similar to the default params section. Polyaxon will validate the params of search against the IO(inputs/outputs) definition. Users should make sure that their IO definition specify the isList: true, unless the type is artifacts.

If a param is based on contexts, inputs, outputs, or artifacts Polyaxon will turn that param into a list by querying that field from all runs in the search result:

 {
    "all_param1": [val_run_1, val_run_223, val_run_234, ...],
    ...
}

When the param is of type ArtifactsType, all files and dirs will be concatenated in a single list, each value will be prefixed with the uuid (run path) of each run in the query result:

 {
    "artifacts": {
        "file": [
            "run_3/subpath/files", "run_3/subpath2/file2",
            "run_4/subpath/files", "run_4/subpath2/file2",
            ...
        ],
    }
    ...
}

Note: the difference between using artifacts.lineage_name and ArtifactsType, is that the former will only expose the path(s) based on any lineage logged during the runtime, the later is a manual way of selecting specific files and dirs.

Fields

query

A valid query respecting Polyaxon Query Language

joins:
  - query: "metrics.loss: <0.01, project.name: {{ globals.project_name}}, kind: job"

sort

A valid sort respecting Polyaxon Query Language

joins:
  - sort: "created_at, -metrics.loss"

limit

The maximum number of runs to join based on the query/sort condition.

Note: at the moment we have a hard limit, 5000, on the number of upstream runs to join.

joins:
  - limit: "10"

offset

joins:
  - offset: "100"

An optional integer used for pagination.

params

Similar to the default params specification with the exception that it does not accept the ref key. The reference is generated automatically based on the search performed by Polyaxon.

The fields supported: value, context_only, connection, to_init