microsoft/graphrag · error · ValueError

Could not find {filename} in storage!

Error message

Could not find {filename} in storage!

What it means

ParquetTableProvider.read_dataframe maps table_name to '{table_name}.parquet' and checks storage.has() before reading; a missing file raises ValueError with the resolved filename. This is the parquet analogue of the CSV provider's missing-table error and fires before pandas parquet parsing is attempted.

Source

Thrown at packages/graphrag-storage/graphrag_storage/tables/parquet_table_provider.py:62

            table_name: str
                The name of the table to read. The file will be accessed as '{table_name}.parquet'.

        Returns
        -------
            pd.DataFrame:
                The table data loaded from the Parquet file.

        Raises
        ------
            ValueError:
                If the table file does not exist in storage.
            Exception:
                If there is an error reading or parsing the Parquet file.
        """
        filename = f"{table_name}.parquet"
        if not await self._storage.has(filename):
            msg = f"Could not find {filename} in storage!"
            raise ValueError(msg)
        try:
            logger.info("reading table from storage: %s", filename)
            return pd.read_parquet(
                BytesIO(await self._storage.get(filename, as_bytes=True))
            )
        except Exception:
            logger.exception("error loading table from storage: %s", filename)
            raise

    async def write_dataframe(self, table_name: str, df: pd.DataFrame) -> None:
        """Write a pandas DataFrame to storage as a Parquet file.

        Args
        ----
            table_name: str
                The name of the table to write. The file will be saved as '{table_name}.parquet'.
            df: pd.DataFrame
                The DataFrame to write to storage.

View on GitHub (pinned to f40e9a26ce)

Solutions

  1. Run graphrag index to produce parquet outputs
  2. Verify base_dir/root and confirm output/<table>.parquet exists
  3. Check the table name against the pipeline's output table configuration

Example fix

# before
df = await provider.read_dataframe("create_base_entities")
# after
# ensure output/create_base_entities.parquet exists (run indexing first)
df = await provider.read_dataframe("create_base_entities")
Defensive patterns

Strategy: try-catch

Validate before calling

if not await provider._storage.has(f"{table_name}.parquet"):
    raise RuntimeError(f"missing output table: {table_name}.parquet")

Try / catch

try:
    df = await provider.read_dataframe(t)
except ValueError as e:
    if "Could not find" in str(e):
        logger.warning("%s not indexed yet", t)
        df = pd.DataFrame()
    else:
        raise

Prevention

When it happens

Trigger: Awaiting read_dataframe('output_table') when <base>/<table>.parquet is absent — unindexed dataset, wrong base_dir, or outputs stored in a different storage account/container.

Common situations: Running the query/update engine before indexing finishes; wrong --root; local vs deployed storage divergence; table renamed between versions so the old name no longer exists.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of microsoft/graphrag@f40e9a26ce (2026-08-27). Data as JSON: /api/errors/38ba502090ffbf7f. Report an issue: GitHub.