1. A method comprising: partitioning, by one or more computing devices, each column of a data table comprising one or more columns and one or more rows into two or more column chunks of a plurality of column chunks based at least in part on a partitioning policy particular to the data table, the partitioning policy specifying a number of column chunks into which each column of the data table should be partitioned and a distribution policy indicating how the column chunks are to be distributed across a plurality of storage servers; constructing, by the one or more computing devices, a plurality of parity column chunks, wherein each parity column chunk is computed using two or more column chunks of the plurality of column chunks; individually distributing for storage, by the one or more computing devices and based at least in part on the distribution policy specified in the partitioning policy particular to the data table, the plurality of column chunks and the plurality of parity column chunks across the plurality of storage servers; receiving a query for data from the data table; transforming the query into a plurality of sub-queries; distributing the plurality of sub-queries across a plurality of query servers; receiving a plurality of sub-results from the plurality of query servers; constructing a result comprising the data by combining the plurality of sub-results; and transmitting the result in response to the query.