# Set up a projection The following information will guide you through the process of enabling, configuring, and building a dataset projection. ## Enable projections for your dataset *Noho* is a service that manages dataset projections. Projections are enabled in a dataset's schema by configuring `noho: true`. You can configure a dataset's schema when writing the dataset from a transform or by manually modifying the schema in the **Details** tab. ```python from transforms.api import transform, Input, Output @transform( output_dataset=Output('/examples/example_output') input_dataset=Input('/examples/example_input'), ) def compute(output_dataset, input_dataset): input_dataset = input_dataset.dataframe() output_dataset.write_dataframe(input_dataset, options={"noho": "true"}) ``` Enable projections in the dataset schema. ## Navigate to the Projections tab You will see a **Projections** tab when viewing a dataset if it has `noho: true` configured in the schema and you have permission to edit the dataset. ![Navigate to the Projections tab of the dataset preview.](../../../assets/8258f439ce705aba717a7761b7967918f8633d68712f54d14f0deb52dd177ab9.webp) ## Open the creation dialog Select `Add new projection`. ![Add new projections in the Projections tab.](../../../assets/4e7707c4ce31cef99cb4f164bf056e537e9f4285eb4d0700a9243e9ebbfcaa51.webp) ## Choose the projection columns Choose the columns to include in the projection. ![Choose to add all or only certain columns, or choose columns to exclude.](../../../assets/963c799657d1ab749c5e0316a4c4e89a52962393f617d6ce76a44b02fe00ebd4.webp) In most cases, `All columns` is appropriate. However, you can adjust this if you know that a query will only select a subset of the columns. ## Choose the projection type Choose the type of the projection. ![Choose whether to optimize filtering or joining in your projection,](../../../assets/f2bca27611e8bc7f58f7b5ced05d8cf79d99650b4fbcd880b1a38f11235e4685.webp) * For [filter-optimized projections](../projections-overview/index.md#filter-on-a-list-of-columns), select the columns to filter on. * The order matters, as the projection will only speed up queries on a prefix of this list. * For [join-optimized projections](../projections-overview/index.md#join-on-a-set-of-columns), select the join columns and bucket count. * Joins will be sped up only on this exact set of columns. * When joining to an explicitly bucketed dataset or another join-optimized dataset, the bucket counts must be equal. ## Create the projection Select the `Create projection` button. ![The projection is configured to select all columns and is optimizing to filter column1 of the dataset.](../../../assets/1aa0206e221ab6436171e51d9e61dcf7252abb8732ac704a49e09763abfe828f.webp) The projection now exists but contains no data. This is denoted by the red warning icon next to the projection. To use the projection in a query, it must first be built by following the next steps. ## Set up a build To give you more control over resource usage, the internal builds that maintain projections are not scheduled automatically; you will need to set one up explicitly. First, toggle the switch `Enable projection builds on the current branch`. This allows builds to run on the **current** branch. Then, configure a schedule for the build. If you want to schedule a build on a different branch, you will need to navigate to that branch and repeat the process. ![Toggle the switch to enable projection builds on the current branch, ](../../../assets/160cd3f49299c1e4885478cf5916cb489d3827766ef865ee83c7af2252f4f6f1.webp) ![Choose whether to add a build schedule in the Build section.](../../../assets/f2c40581eaf44a05079bd88adb07d2e86b4e55e58ce4ddf8627e0ee9d4727d78.webp) ![The build is scheduled for every day at 12:31 AM EST.](../../../assets/9e50fa29a888a752bb83ff1a89fa54e603d36892590ba5306491d3f53257855a.webp) ## (Optional) Build the projection If you do not want to wait for the build, explicitly build the projection by selecting the **Build** button. ![Select the hammer symbol above the Build section to manually trigger the projection build.](../../../assets/0ac93c6d7f0acdd0013ed92f59435991926060f3a2ef43c6fb67b44a47f75e67.webp) Now, wait for the build to complete. Multiple builds may run before the projection is up to date. A green check next to the `Projection Build Status` line indicates that the projection is now fully up-to-date. ![The projection was successfully built, as shown by a green checkmark in a circle.](../../../assets/623b595cadc575f7aec71bab654f2673e77d1ddfb654495b6aa515113fab62c9.webp) The projection is now up-to-date and will be used for reads on the dataset.